阶乘与整除
题目详情:
对于整数n,n的阶乘表示为n!定义如下
0! = 1
n! = n * (n - 1)!
给定n和m,问n!是否是m的倍数?
n和m全在32位整数范围内,m非0。
返回1和0表示整除和不整除。
超时好几次,终于...
m不断除去 n和m的最大公约数
如果m是1表示除尽,如果m是素数则判断当前n是否大于m,如果大于则一定能除尽,否则除不尽。
#include<stdio.h>
#include<math.h>
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
int isprime(int n){
int i,len;
if(n==1) return 0;
if(n==2) return 1;
if(n%2==0) return 0;
len=sqrt(1.0*n);
for(i=3;i<=len;i+=2)
if(n%i==0)
return 0;
return 1;
}
int divides (int n,int m)
{
int i;
if(m==1) return 1;
for(i=n;i>=2;i--){
m=m/gcd(i,m);
if(m==1)
return 1;
if(isprime(m)){
if(i>m) return 1;
else return 0;
}
}
return 0;
}
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
int main()
{
printf("%d",divides(5,25));
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。