您的位置:首页 > 其它

不可摸数

2015-12-26 10:07 525 查看

不可摸数

Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 26 Accepted Submission(s) : 13
[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


[align=left]Author[/align]
Zhousc@ECJTU

[align=left]Source[/align]
ECJTU 2008 Spring Contest

思路就是求出对1000以内的各个数值的因子和

代码如下

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN=500050;
int m[MAXN],dp[MAXN];
int main(){
int n,T_T;
scanf("%d",&T_T);
memset(m,0,sizeof(m));
memset(dp,0,sizeof(dp));
for(int i=1;i<=MAXN/2;i++)
for(int j=i+i;j<MAXN;j+=i)
m[j]+=i;
for(int i=1;i<MAXN;i++)
if(m[i]<=1000)dp[m[i]]=1;
while(T_T--){
scanf("%d",&n);
if(dp
)puts("no");
else puts("yes");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: