1.枚舉?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{int a = 0;int b = 0;int tmp = 0;scanf("%d %d", &a, &b);if (a < b){for (int i=1; i < a; i++){if (0==a% i && 0==b%i)tmp = i;}}if (a>b){for (int i = 1; i < b; i++){if (0 == b % i && 0 == a % i)tmp = i;}}if (a = b)tmp = a;printf("%d", tmp);return 0;
}
注意i不能從0開始否則有Integer division by zero報錯,即整數除以零
但是代碼可以進一步簡化:
輸入兩個數-->找出最小數-->從最小數開始:從大向小找,一旦找到就是最大公約數
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{int a = 0;int b = 0;int tmp = 0;scanf("%d %d", &a, &b);if (a > b)tmp = b;elsetmp =a;while (1)//一直循環{if (0 == a % tmp && 0 == b % tmp){printf("%d", tmp);break;}tmp--;}return 0;
}
2.輾轉相除法?
定義:先用較大的數除以較小的數,再用出現的余數(第一余數)去除除數,再用出現的余數(第二余數)去除第一余數,如此反復,直到最后余數是0為止。此時的除數就是所求的最大公約數。
18%24=18-->24%18=6-->18%6=0-->6是最大公約數
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{int a = 0;int b = 0;int tmp = 0;scanf("%d %d", &a, &b);while (tmp=a%b)//循環,m%n=0退出{a = b;b = tmp;}printf("%d", b);return 0;
}
最小公倍數=a*b/最大公約數?
?
?
?