大佬帮忙看看吧
查看原帖
大佬帮忙看看吧
621480
wzrun楼主2021/12/13 21:02

写入9902099 9902100,输出9902099这个点在本地输出不了。。。不知道哪错了,其他点都能过```c #include<stdio.h> #include #include<string.h> #include<math.h> using namespace std; int main() {

unsigned long long int  a[100000]={0},c[100000]={0},e,b,n=0,i,j,q,isprime,w=0;
int max=10000;

scanf("%lld %lld",&e,&b); 


int d1,d2,d3,d4;
if(e<10) {
for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数.一个位 
    if(d1>b){
       	break;
	}
	c[n++] = d1;//(处理回文数...)到时候循环判断的条件就是<n   
}
}
if(e<100){
for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数.两个位 
     if( 10*d1 + d1>b){
       	break;
	}
	c[n++] = 10*d1 + d1;//(处理回文数...)到时候循环判断的条件就是<n 
}
}
if(e<1000){
for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数。三个位 
 for (d2 = 0; d2 <= 9; d2++) {
 	 if(d1*100+d2*10+d1>b){
       	break;
	   }
       c[n++] = d1*100+d2*10+d1;//(处理回文数...)到时候循环判断的条件就是<n 
 } if(d1*100+d2*10+d1>=b){
       	break;
	   }
}
}
if(e<10000){
 for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数。四个位 
     for (d2 = 0; d2 <= 9; d2++) {
     	if(d1*1000+d2*100+d2*10+d1>b){
           	break;
		   }
           c[n++] = d1*1000+d2*100+d2*10+d1;//(处理回文数...)到时候循环判断的条件就是<n      
     }if(d1*1000+d2*100+d2*10+d1>b){
           	break;
		   }
 }
}
if(e<100000){
for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数.五个位 
 for (d2 = 0; d2 <= 9; d2++) {
     for (d3 = 0; d3 <= 9; d3++) {
     	 if(10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1>b){
       	break;
	   }
       c[n++] = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;//(处理回文数...)到时候循环判断的条件就是<n 
     }if(10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1>b){
       	break;
	   }
 }if(10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1>b){
       	break;
	   }
 }
}
if(e<1000000){
for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数.六个位 
 for (d2 = 0; d2 <= 9; d2++) {
     for (d3 = 0; d3 <= 9; d3++) {
     	if( 100000*d1 + 10000*d2 +1000*d3+100*d3 + 10*d2 + d1>b){
       	break;
	   }
       c[n++] = 100000*d1 + 10000*d2 +1000*d3+100*d3 + 10*d2 + d1;//(处理回文数...)到时候循环判断的条件就是<n 
     }if( 100000*d1 + 10000*d2 +1000*d3+100*d3 + 10*d2 + d1>b){
       	break;
	   }
 }if( 100000*d1 + 10000*d2 +1000*d3+100*d3 + 10*d2 + d1>b){
       	break;
	   }

} } if(e<10000000){

for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数.七个位 
     for (d2 = 0; d2 <= 9; d2++) {
         for (d3 = 0; d3 <= 9; d3++) {
         	for(d4=0;d4<=9;d4++){
         		if(1000000*d1 + 100000*d2 +10000*d3+1000*d4 +d3*100+ 10*d2 + d1>b){
           		break;
           		}
           		c[n++] = 1000000*d1 + 100000*d2 +10000*d3+1000*d4 +d3*100+ 10*d2 + d1;//(处理回文数...)到时候循环判断的条件就是<n 
		   	}if(1000000*d1 + 100000*d2 +10000*d3+1000*d4 +d3*100+ 10*d2 + d1>b){
           		break;
           		}
        }if(1000000*d1 + 100000*d2 +10000*d3+1000*d4 +d3*100+ 10*d2 + d1>b){
           		break;
           		}
    }if(1000000*d1 + 100000*d2 +10000*d3+1000*d4 +d3*100+ 10*d2 + d1>b){
           		break;
           		}
}

} if(e<100000000){

for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数.八个位 
     for (d2 = 0; d2 <= 9; d2++) {
         for (d3 = 0; d3 <= 9; d3++) {
         	for(d4=0;d4<=9;d4++){
         		if(10000000*d1 + 1000000*d2 +100000*d3+10000*d4 +1000*d4+d3*100+ 10*d2 + d1>b){
           		break;
           		}
           		c[n++] = 10000000*d1 + 1000000*d2 +100000*d3+10000*d4 +1000*d4+d3*100+ 10*d2 + d1;//(处理回文数...)到时候循环判断的条件就是<n
		   	}if(10000000*d1 + 1000000*d2 +100000*d3+10000*d4 +1000*d4+d3*100+ 10*d2 + d1>b){
           		break;
           		}
        }if(10000000*d1 + 1000000*d2 +100000*d3+10000*d4 +1000*d4+d3*100+ 10*d2 + d1>b){
           		break;
           		}
    }if(10000000*d1 + 1000000*d2 +100000*d3+10000*d4 +1000*d4+d3*100+ 10*d2 + d1>b){
           		break;
           		}
}	

}

for(i=0;i<n;i++){//判断质数并存起来 
	if(c[i]<e){
		continue;
	}
	j=c[i];
	isprime=1;
	for(q=2;q<=sqrt(j);q++){
		if(j%q==0){
			isprime=0;
			break;
		}
	}
	if(isprime){
		a[w++]=j;
	}	
}
q=w;
for(i=0;i<q;i++){
	printf("%lld\n",a[i]);
}


return 0;

}

2021/12/13 21:02
加载中...