ACM 294 Q294: Divisors
作法:建出質數表做因數分解
例如:40=2^3 * 5 個數就是 (3+1)*2=8
/**********************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int Prime[5200]={0},p;
int prime()
{
char num[100000]={0};
int a,b,m=0;
for(a=2;a<50000;a++)
if(num[a]==0)
{
Prime[m]=a;
m++;
for(b=2;a*b<=50000;b++)
num[a*b]=1;
}
return m;
}
int Divisors (int num)
{
int a,b,C=1,m=(int)sqrt(num);
for(a=0;a<p&&Prime[a]<=m&&num!=1;a++)
{
int time=0;
if(num%Prime[a]==0)
{
while(num%Prime[a]==0)
{
num/=Prime[a];
time++;
}
C*=(time+1);
}
}
if(num!=1)
C*=2;
return C;
}
main()
{
p=prime();
int t,n,m,a;
while(scanf("%d",&t)==1)
while(t--)
{
scanf("%d %d",&n,&m);
int maxn,max=0;
for(a=n;a<=m;a++)
{
int time=Divisors (a);
if(time>max) {max=time;maxn=a;}
}
printf("Between %d and %d, %d has a maximum of %d divisors.\n",n,m,maxn,max);
}
return 0;
}
for(b=2;a*b<=50000;b++)
但是題目是說U<=1000000000
要求到這麼大的質數表 還是可以這樣做嗎?
for(a=0;a<p&〃[a]<=m&&num!=1;a++)
這行是什麼XD看無?
您的瀏覽器不支援哦 2009-09-12 19:27:13
還是說 其實只要求到n^(1/2)的質數就好了?
因為必有小於根號N的因數 否則必為質數?