1 条题解

  • 0
    @ 2025-8-11 9:05:06
    #include<bits/stdc++.h>
    using namespace std;
    bool isPrime(int p){
    	if(p<=3) return p>1;
    	
    	if(p%2==0 || p%3==0) return false;
    	
    	for(int i=5;i*i<=p;i+=6){
    		if(p%i==0||p%(i+2)==0) return false;
    	}
    	
    	return true;
    }
    
    int reHigh(int r){	
    	if(r<=9) return 0;
    	int res=0,mul=1;
    	while(r>9){
    		res+=r%10*mul;
    		r/=10;
    		mul*=10;
    	}
    	return res;
    }
    
    int main(){
    	//一、分析问题
    	//已知:所有小于3000的四位数。 
    	//未知:求出所有小于 3000 的四位的纯粹素数。
    	//关系: 一个素数,去掉最高位,剩下的数仍为素数,再去掉剩下的数的最高位,余下的数还是素数。这样下去一直到最后剩下的个位数也还是素数。
    	//二、定义变量(已知、未知、关系) 
    	int t;
    	bool isFind;
    	//三、输入已知
    	//四、根据关系计算
    	for(int i=1001;i<3000;i+=2){
    		t=i;
    		isFind=true;
    		while(t){
    			if(!isPrime(t)){
    				isFind=false;
    				break;	
    			}
    			t=reHigh(t);
    		}
    		//五、输出未知 
    		if(isFind) cout<<i<<endl;
    	} 
    
    	return 0;
    } 
    

    信息

    ID
    553
    时间
    1000ms
    内存
    16MiB
    难度
    9
    标签
    递交数
    17
    已通过
    2
    上传者