hdu 1406 完数
和hdu1999差不多,求因子和。不过在1000内只用三个完数,打表可以0MS
#include <stdio.h>
#define MAXN 500001
#define MAXQ 10001
bool flag[MAXN];
int sum[MAXN];
void init()
{
int i,j;
for(i=1; i<=MAXN/2; i++)
{
for(j=i+i; j<MAXN; j+=i)
{
sum[j]+=i;
}
}
for(i=0; i<MAXN; i++)
{
if(sum[i]<MAXQ && sum[i] == i)
flag[i]=true;
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("tdata.txt","r",stdin);
#endif
init();
int n,a,b;
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
scanf("%d %d",&a,&b);
if(a>b) a^=b^=a^=b;
int cnt=0;
while(a<=b)
if(flag[a++]) cnt++;
printf("%d\n",cnt);
}
}
return 0;
}
//*************************************************************************
#include <stdio.h>
int perfectNum[4]={6,28,496,8128};
int main()
{
#ifndef ONLINE_JUDGE
freopen("tdata.txt","r",stdin);
#endif
int n,a,b,i,cnt;
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
scanf("%d %d",&a,&b);
if(a>b) a^=b^=a^=b;
cnt=0;
for(i=0;i<4;i++)
{
if(a <= perfectNum[i] && perfectNum[i] <=b)
cnt++;
}
printf("%d\n",cnt);
}
}
return 0;
}
//*******************************************************************************************************************************************
还有一个优化的完数判别函数
bool Is_perfectNum(int n)
{
int sum=1;
int lim=(int)sqrt(double(n));
for(int i=2; i<=lim; ++i)
if(n%i == 0)
sum += (i+n/i);
return sum==n;
}
浙公网安备 33010602011771号