完數
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 15108 Accepted Submission(s): 5489
本題的任務是判斷兩個正整數之間完數的個數。
#include<cstdio>
#include<cmath>#define mm 10009
int ans[mm];
bool is_ok(int m)
{
int sum=0;
int ms=(int)sqrt((float)m)+1;
for(int i=2;i<ms;i++)
{
if(m%i==0)
{
if(i!=(m/i))
sum+=i+m/i;
else sum+=i;
}
}
sum++;
if(sum==m) return 0;
else return 1;
}
int main()
{
ans[1]=ans[2]=0;
for(int i=3;i<10000;i++)
{
if(is_ok(i)==0)
ans[i]=ans[i-1]+1;
else ans[i]=ans[i-1];
}
int cas,a,b;
scanf("%d",&cas);
while(cas--)
{
scanf("%d%d",&a,&b);
if(a>b)
printf("%d\n",ans[a]-ans[b-1]);
else
printf("%d\n",ans[b]-ans[a-1]);
}
return 0;
}