请高手指教acm

来源:百度知道 编辑:UC知道 时间:2024/06/17 00:25:18
Problem Description
s(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=1+2+3+4+6=16.如果任何
数m,s(m)都不等于n,则称n为不可摸数.
Input
包含多组数据,首先输入T,表示有T组数据.每组数据1行给出n(2<=n<=1000)是整数。
Output
如果n是不可摸数,输出yes,否则输出no
Sample Input
3
2
5
8
Sample Output
yes
yes
no
http://acm.hdu.edu.cn/showproblem.php?pid=1999
请高手指教acm
#define EOF -1
void main()
{int n,i,j,zu,p,c;
long sum;
while(scanf("%d",&zu)!=EOF)
{for(j=0;j<zu;j++)

{scanf("%d",&n);
c=0;

for(i=2;i<=1000;i++)
{sum=0;

for(p=1;p<i;p++)
{if(i%p==0)

sum+=p;

}
if(sum==n)
{printf("no\n");break;}

else c++;}if(c==999)printf("yes\n");

}

}
为什么不对啊

}

试试这个。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int sumOfFactors(int n){
int sum=0,i;
for(i=1;i<=n/2;i++)
if(n%i==0) sum+=i;
return sum;
}

int isUnreachable(int n){
double s=(sqrt(1+8*n)-1.0)/2.0;
long s1=(long)s;
s1=s1*2;
long s2=(n-1)*(n-1);
long i;
for(i=s1<s2?s1:s2;i<=(s1<s2?s2:s1);i++)
if(sumOfFactors(i)==n) return 0;
return 1;
}

int main(){
int l;
scanf("%d",&l);
int *a=(int *)calloc(l,sizeof(int));
int i,n;
for(i=0;i<l;i++){
scanf("%d",&n);
a[i]=isUnreachable(n);
}
for(i=0;i<l;i++){
if(a[i]==1) printf("yes\n");
else printf("no\n");
}
free(a);
return 0;
}

你问题补充的是什么?你自己写的答案?