问题标题: 酷町堂:3361   特殊质数

2
0
已解决
张元宝
张元宝
修练者
修练者

我是80分,,怎样会不超时呀?求指点

#include<bits/stdc++.h>
using namespace std;

int main() {
    int n,s;
    bool h=true;
    cin>>n;
    for(int i=pow(10,n-1)*2; i<=pow(10,n); i++) {
            s=i;
            while(s!=0) {
                for(int j=2; j<=sqrt(s); j++) {
                    if(s%j==0) {
                        h=false;
                        break;
                    }
                }
                if(h==false) break;
                s=s/10;
                h=true;
            }
            if(h==true) {
                cout<<i<<endl;
            }
            h=true;
    }
    return 0;
}

 


0
已采纳
孙志浩
孙志浩
资深守护
资深守护

这题太难了,建议先不要做。

0
桑烁
桑烁
高级光能
高级光能

1.你这是三重循环,不超时才怪。你可以取s的每一位,再判断,就是两重循环

2.它一定是奇数,可以i+=2

3.你可以先判断s%2,然后j=3,也可以j+=2

4.如果i比较大(如1000,10000),到4000,40000...,6000,60000等等的时候直接跳过

5.循环先判断i各个位上是不是质数(2,3,5,7,9),如果不是就跳过

0
0
夏天
夏天
中级守护
中级守护

1.你这是三重循环,不超时才怪。你可以取s的每一位,再判断,就是两重循环

2.它一定是奇数,可以i+=2

我要回答