搜索?循环?
查看原帖
搜索?循环?
1139097
Mengyj2024楼主2024/11/9 20:19

违规紫衫

不是题解!!!

发现了新做法
从第2位开始地推上去

狮山
#include<bits/stdc++.h>
using namespace std;
bool check(int x){              //质数判断 
    if(x<2)return false;
    if(x==2)return true;
    for(int i=2;i*i<=x;i++){
        if(x%i==0)return false;
    }
    return true;
}
vector<int>v;                   //记录已知特殊质数 
int main(){
    int n;                      //位数 
    cin>>n;
    if(n==1){                   //特判 
        cout<<"2\n3\n5\n7";
        return 0;
    }
    int len=4;                  //n特殊质数结束,新总长度 
    int llen=1;                 //n位特殊质数开始,旧总长度 
    int lllen=0;                //把老特殊质数结束+1变成新特殊质数开始
    int llllen=0;
    v.push_back(0); 
    v.push_back(2);
    v.push_back(3);
    v.push_back(5);
    v.push_back(7);
    for(int i=2;i<=n;i++){      //递推上去 
        lllen=len;              //老特殊质数结束赋值给lllen 
        llllen=len;
        for(int j=llen;j<=llllen;j++){     //从老特殊质数开始到结束 
            for(int k=1;k<=9;k++){      //
                if(k==2||k==4||k==6||k==5||k==8)continue; //不是质数,直接跳出 
                int total=v[j]*10+k;    //新数 
                if(check(total)==true){ //判断是不是质数 
                    v.push_back(total); //是的把它加进去 
                    len++;              //总长度++ 
                }
            }
        }
        llllen=len;
        llen=lllen+1;              //旧长度=以前新长度 
    }
    for(int i=llen;i<=len;i++){    //循环输出 
        cout<<v[i]<<endl;
    }
    return 0;
}
2024/11/9 20:19
加载中...