您的位置:首页 > 其它

HDU_1999——不可摸数

2013-06-15 20:35 197 查看
[align=left]Problem Description[/align]
s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何
数m,s(m)都不等于n,则称n为不可摸数.

[align=left]Input[/align]
包含多组数据,首先输入T,表示有T组数据.每组数据1行给出n(2<=n<=1000)是整数。

[align=left]Output[/align]
如果n是不可摸数,输出yes,否则输出no

[align=left]Sample Input[/align]

3 2 5 8

[align=left]Sample Output[/align]

yes yes no

#include <cstdio>
#include <cmath>
int mark[1001]={0};
void fun(void)
{
mark[1]=1;
for(int n=4;n<1000000;n++)
{
int s=1;
int o=(int)sqrt(double(n));
for(int j=2;j<=o;j++)
if(n%j==0)
{
if(j*j==n)
s=s+j;
else
s=s+j+n/j;
if(s>1000)  break;
}
if(s<1001)
mark[s]=1;
}
}

int main()
{
int T,n;
scanf("%d",&T);
fun();
while(T--)
{
scanf("%d",&n);
if(mark
)
printf("no\n");
else
printf("yes\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: