要求输出从1到3000的所有n,使得n=p1*p1*p2,p1不等于p2,p1,p2均为质数。
原题地址:http://acm.jlu.edu.cn/joj/showproblem.php?pid=2770
下面是我的代码,总是RUNTIME ERROR #8……求大牛们指教。
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int check(int m);
int main()
{
int i;
int t;
int clannad;
int counter;
int flag;
int prime[300];
int count=1;
prime[0]=2;
for(t=3;t<750;t++)
{
if(check(t))
{
prime[count]=t;
count++;
}
}
for(i=12;i<=3000;i++)
{
int shuzu[3]={0,0,0};
flag=1;
counter=0;
clannad=i;
for(t=0;t<=count+1;t++)
{
if(clannad%prime[t]==0)
{
clannad/=prime[t];
shuzu[counter]=prime[t];
counter++;
t--;
if(counter==3&&clannad!=1)
{
flag=0;
break;
}
else if(counter==3&&clannad==1)
{
flag==1;
break;
}
continue;
}
}
if((shuzu[0]!=0&&shuzu[1]!=0&&shuzu[2]!=0))
{
if(flag)
{
if((shuzu[0]==shuzu[1]&&shuzu[0]!=shuzu[2])||(shuzu[0]==shuzu[2]&&shuzu[0]!=shuzu[1])||(shuzu[2]==shuzu[1]&&shuzu[0]!=shuzu[2]))
{
printf("%d\n",i);
}
}
}
}
return 0;
}
int check(int m)
{
int flag=1;
int l;
for(l=2;l<sqrt(m)+1;l++)
{
if(m%l==0)
{
flag=0;
}
if(flag==0)
break;
}
if(flag==1)
return 1;
else
return 0;
}
已经把flag==1改为了flag=1;上传之后仍然是Runtime error
另,这个程序自己运行没有发现问题,但是上传之后就抛出了runtime error。
谢谢你的回答
就不好了。是不是你的平台较新,而提交上去后运行的平台较旧,不允许在函数的任意地方定义变量;你把int shuzu[3]={0,0,0};提前到int count=1;后看看。其他也说不清楚了……
追问还是不行,我想放弃了。
话说acm的条条框框那么多,现在想如果能够编出正确的程序不就可以了?!谢谢你的回答啊。