匿名用户
1级
2014-09-26 回答
#include
#include
int isprime(int n){
int i;
for(i=2;i
if(n%i==0)
return 0;
return 1;
}
int prime_m(int n,int x[],long y[]){
int m,j=0,s[20]={0},a;
long M,rei;
for(m=2;m<=n;m++){
M=(long)pow(2,m)-1;
while(isprime(M)){ //这里应该使用if,而不是while
rei=M;
a=0;
while(rei)
{ s[a]=rei%10;
rei=rei/10;
a++;
}
printf("%d\n",M);
//应该在操作s[a]之前先进行a--,因为上面最后一次a++后,对应的s[a]没有赋值
if(s[a]%2==1){
for(;a=0;a--){ //for语句中间条件判断处不应该是a=0(这是赋值语句),应是a>=0
if(s[a]==1){
x[j]=m;
y[j]=M;
j++;
//这里已经找到,应该break
}
}
}
}
}
return j;
}
void main(){
int k,n,x[100],i;
long y[100];
FILE *fp;
fp=fopen("myf2.out","w");
printf("请输入n:\n");
scanf("%d",&n);
k=prime_m(n,x,y);
printf("%d\n",k);
for(i=1;i<=k;i++) //x[i]和y[i]应该成对输出,因此这里少个"{"
//另外,i的范围应该是[0,k-1],即for(i=0;i
fprintf(fp,"%d\n",x[i]); //我看要求的格式,这里是不是应该使用“\t”而不是"\n"?
fprintf(fp,"%d\n",y[i]);
//这里添加"}"
fprintf(fp,"\nMy exam number is : 00123");
fclose(fp);
}