欧几里得算法题目练习
1.填空
- (55,85)的最大公约数为( 5 )
- (202,282)的最大公约数为( 2 )
- (2t-1,2t+1)的最大公约数为( 1 )
- (2n,2(n+1)) 的最大公约数为( 2 )
2.证明
- 证明:若2|n ,5|n ,7|n ,那么70|n
- **设n为整数,证明:6|n^3-n
3.算法题(欧几里得算法和扩展欧几里得算法)
- 编程实现欧几里得算法求2个数的最大公约数,并求(123456,234567)、(111222333,444555666)的最大公约数。将实验结果截图(注意:数值不正确没分)
#include<stdio.h>
long gcd(long a,long b){
if(b==0){
return a;
}
gcd(b,a%b);
}
int main(){
long a,b,d,t;
printf("输入的第一个数;\n");
scanf("%ld",&a);
printf("输入的第二个数;\n");
scanf("%ld",&b);
if(a<b){
t=a;
a=b;
b=t;
}
d=gcd(a,b);
printf("gcd=%ld",d);
return 0;
}
2. 编程实现扩展欧几里得算法,使得sa+tb=(a,b),其中(a,b)为(1613,3589)和(202,282),求出s、t分别为多少(将运行结果截图)
#include<stdio.h>
long gcd(long a,long b,long&s,long&t){
if(b==0){
s=1;
t=0;
return a;
}
long r=gcd(b,a%b,s,t);
long t1=t;
t=s-(a/b)*t;
s=t1;
return r;
}
int main(){
long a,b,s,t;
printf("输入的第一个数;\n");
scanf("%ld",&a);
printf("输入的第二个数;\n");
scanf("%ld",&b);
if(a<b){
t=a;
a=b;
b=t;
}
gcd(a,b,s,t);
printf("s=%d\n",s);
printf("t=%d\n",t);
printf("gcd=%ld",a*s+b*t);
return 0;
}