如果q和r是a除以b的商和余数,有a=b*q+r;
a^b%n,用2分;
#include<stdio.h>
#define PRINT printf("1.最大公约数 2.最小公倍数 3.a^b%%n ")
int gcd(int a,int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}//最大公约数
int lcm(int a,int b)
{
if(a*b==0)
return 0;
else
return a*b/gcd(a,b);
}//最小公倍数
int modExp(int a,int b,int n)
{
int t=1,y=a;
while(b!=0){
if(b%2==1)
t=t*y%n;
y=y*y%n;
b/=2;
}
return t;
}//a^b mod n
int main()
{
int a,b,n,c,result;
while(PRINT,scanf("%d",&c),c){
scanf("%d %d",&a,&b);
switch(c){
case 1:result=gcd(a,b);break;
case 2:result=lcm(a,b);break;
case 3:scanf("%d",&n);result=modExp(a,b,n);break;
}
printf("%d ",result);
}
return 0;
}
#define PRINT printf("1.最大公约数 2.最小公倍数 3.a^b%%n ")
int gcd(int a,int b)
{
if(b==0)
return a;
else
return gcd(b,a%b);
}//最大公约数
int lcm(int a,int b)
{
if(a*b==0)
return 0;
else
return a*b/gcd(a,b);
}//最小公倍数
int modExp(int a,int b,int n)
{
int t=1,y=a;
while(b!=0){
if(b%2==1)
t=t*y%n;
y=y*y%n;
b/=2;
}
return t;
}//a^b mod n
int main()
{
int a,b,n,c,result;
while(PRINT,scanf("%d",&c),c){
scanf("%d %d",&a,&b);
switch(c){
case 1:result=gcd(a,b);break;
case 2:result=lcm(a,b);break;
case 3:scanf("%d",&n);result=modExp(a,b,n);break;
}
printf("%d ",result);
}
return 0;
}
594

被折叠的 条评论
为什么被折叠?



