- 不可摸数
题目描述
s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何数m,s(m)都不等于n,则称n为不可摸数.
输入
包含多组数据,首先输入T,表示有T组数据.每组数据1行给出n(2<=n<=1000)是整数。
输出
如果n是不可摸数,输出yes,否则输出no
样例输入
3
2
5
8
样例输出
yes
yes
no
解题思路:
#include<stdio.h>
#include<time.h>
int n[1001];
int main(){
int i,j,t,k,m;
char c;
clock_t start,finish;
double totaltime;
start=clock();
n[1]=1;
for(i=1;i<1000000;i++){
k=1;
for(j=2;j*j<=i;j++)
if (i%j==0){
if (j*j==i) k+=j;
else k+=j+i/j;
if (k>1000) break;
}
if (k<1001) n[k]=1;
}
scanf("%d",&t);
getchar();//吸收回车
while(t){
while((c=getchar())!='\n'){
if(c!=' '){
m=c-'0';
if(n[m]==0) printf("yes ");
else printf("no ");
}
}
printf("\n");
t--;
}
finish=clock();
totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
printf("\n该方法运行时间为:%f",totaltime);
return 0;
}