杭电1999题,测试数据都过了,为什么Wrong Answer,请那位大牛帮忙改改,谢谢!! !

[复制链接]
查看11 | 回复4 | 2011-9-15 07:42:59 | 显示全部楼层 |阅读模式
不可摸数TimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):3719AcceptedSubmission(s):976ProblemDescriptions(n)是正整数n的真因子之和,即小于n且整除n的因子和.例如s(12)=12346=16.如果任何数m,s(m)都不等于n,则称n为不可摸数.Input包含多组数据,首先输入T,表示有T组数据.每组数据1行给出n(2=n=1000)是整数。Output如果n是不可摸数,输出yes,否则输出noSampleInput3258SampleOutputyesyesnoAuthorZhousc@ECJTUSourceECJTU2008SpringContestRecommend代码是#includestdio.hmain(){intri,repeat,i,j,n,d,s;scanf(\"%d\",for(ri=1;ri=repeat;ri){scanf(\"%d\",d=0;for(i=2;i2*n;i){s=0;for(j=1;j=i/2;j){if(i%j==0)s=sj;}if(s==n)d=1;}if(d==1)printf(\"no\\n\");elseprintf(\"yes\\n\");}}
回复

使用道具 举报

千问 | 2011-9-15 07:42:59 | 显示全部楼层
同学~~你测试的范围开小了~~~最起码要测试到50*n还有就是你这方法铁定超时~追问不是吧,2*n就足够了吧,如果测试的范围开大会做许多无用功,测试时反而会超时的啊
回复

使用道具 举报

千问 | 2011-9-15 07:42:59 | 显示全部楼层
#includeiostream#includetime.h#defineMaxn1000000//最大测试半径usingnamespacestd;inta[1001]={0};intprime[Maxn5]={0};intmain(){intbe=clock();prime[1]=0;for(inti=2;i=Maxn;i)if(!prime)for(intj=i;j=Maxn;j=i)if(!prime[j])prime[j]=i;inttemp,ans,SumTemp,sum,p,mi=0;a[1]=1;for(inti=2;i=Maxn;i)//求出其中每个数的因子和{temp=i;sum=1;while(prime[temp]){p=prime[temp];ans=p;SumTemp=1;while(temp%p==0){SumTemp=ans;ans*=p;temp/=p;}sum*=SumTemp;}if(sum-i=1000if(imi)mi=i;}}//printf(\"%d\\n\",mi);//测试打表范围是否够用inten=clock()-be;//printf(\"%dms\\n\",en);//测试打表所用时间inttcase,n;cintcase;while(tcase--){cinn;printf(\"%s\\n\",a[n]==0?\"yes\":\"no\");}return0;}这个程序不是纯打表程序刚写完的,新鲜出炉,我试过了~~可以过^_^
回复

使用道具 举报

千问 | 2011-9-15 07:42:59 | 显示全部楼层
.
回复

使用道具 举报

千问 | 2011-9-15 07:42:59 | 显示全部楼层
分给我吧#includestdio.hmain(){inti,n;charch[2000];while(gets(ch)){for(i=0;ch;i)if(ch=\'A\'=\'Z\')ch=ch32;for(i=0;ch;i)printf(\"%c\",ch);printf(\"\\n\");}}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行