算法导论中的题目,老师让用素数去实现查找最大约数个数
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> #include<algorithm> #include<vector> #include<math.h> using namespace std; #define ll long long const int INF=0x7fffffff; const int N=100000+2; int prime[1005]; void is_prime() //素数打表 { int i,j; memset(prime,0,sizeof(prime)); for (i=2;i*i<=1000;i++) { if (!prime[i]) for (j=i*i;j<=1000;j+=i) prime[j]=1; } } int fun(int n) //求约数个数 { int i,tmp,sum=1; if (!prime[n]) return 2; for (i=2;i<=n/2;i++) { tmp=n; int cnt=0; if (tmp%i==0&&!prime[i]) { while (tmp%i==0) { cnt++; tmp/=i; } } sum*=(1+cnt); } return sum; } int main() { int n,i,l,r,cnt=0; is_prime(); scanf("%d%d",&l,&r); for (i=l;i<=r;i++) if (cnt<fun(i)) cnt=fun(i); printf("%d\n",cnt); return 0; }