Principe de la méthode de plus de soustraction
Supposons qu'il y ait deux nombres 161 et 63. Nous avons besoin du plus grand facteur commun de ces deux nombres. Supposons que le plus grand facteur commun soit m. Nous pouvons considérer le plus grand nombre 161 comme 63 + 98, et la somme de 63 et 98 est 161. Divisible par m, 63 peut aussi être divisible par m et 98 peut être divisible par m naturellement;
Cette question est donc convertie pour trouver le plus grand facteur commun m de 98 et 63 (égal à m ci-dessus).
Pensez à 98 comme 63 + 35, où 63 peut être divisible par m, et 98 peut également être divisible par m, donc 35 peut également être m Divide;
Ainsi, la question est ensuite transformée en trouvant le plus grand facteur commun m de 35 et 63 (égal au m ci-dessus). La
même chose est convertie en trouvant le plus grand facteur commun de (63-35) => 28 et 35 et ensuite en trouvant le plus grand facteur commun de 28 et 7.… (Continuez à diminuer et à diminuer)
Ensuite, il a été converti en plus grand facteur commun
de 7 et 7 et finalement converti en plus grand facteur commun de 7 et 0.
Il suffit de sortir le premier nombre, c'est le principe de la soustraction.
#include<stdio.h>
main()
{
int a,b,num1,num2;
printf("请输入这两个数:");
scanf("%d %d",&a,&b);
num1=a,num2=b;
while(a!=b)/* a, b不相等,大数减小数,直到相等为止。*/
{
if(a>b)
a-=b;
else
b-=a;
}//a==b结束循环,根据更相减损术,若a==b,则a(或b)即为两数的最大公约数。
printf("a、b的最大公约数为:%d\n",a);
printf("a、b的最小公倍数为:%d",num1*num2/a);//最小公倍数=两整数的乘积÷最大公约数
}
Le principe de lancer et de diviser
La division Toss and Turns est une méthode pour trouver le plus grand diviseur commun. Sa méthode spécifique est la suivante: divisez le plus grand nombre par le plus petit nombre, puis utilisez le nombre restant qui apparaît (le premier reste) pour supprimer le diviseur, puis utilisez le nombre restant qui apparaît (le deuxième reste) pour supprimer le premier reste, et ainsi de suite jusqu'à À la fin, le reste est égal à 0. S'il s'agit de trouver le plus grand diviseur commun de deux nombres, alors le diviseur final est le plus grand diviseur commun de ces deux nombres.
int gcd(int a,int b){
if(b==0) return a;
else return gcd(b,a%b);
}
Ou une façon d'écrire plus concise
int gcd(int a,int b){
return !b?a:gcd(b,a%b);
}