从N+1枚举,判断这个数是不是性感素数 a. 判断两种情况 ⅰ. N-6 ⅱ. N+6 b. 判断一种情况 ⅰ. N+6,(N+1和N+7)漏了N+1~N+5比N小的时候的匹配情况。 ⅱ. 预先将N到N+5之间这几个数处理掉
判断素数: a. 优化到根号n
代码
直接讨论两种情况
#include<iostream>#include<cmath>usingnamespace std;inlineboolisPrime(int n){if(n <=1)returnfalse;int sq =sqrt(n);for(int i =2; i <= sq; i++){if(n % i ==0)returnfalse;}returntrue;}intmain(){int N;
cin >> N;auto a =isPrime(N);auto b =isPrime(N-6);auto c =isPrime(N+6);if(a && b){
cout<<"Yes"<<endl;
cout<<N-6<<endl;return0;}if(a && c){
cout<<"Yes"<<endl;
cout<<N+6<<endl;return0;}//本身不是
cout<<"No"<<endl;for(int i = N+1;1; i++){auto a =isPrime(i);if(!a)continue;auto b =isPrime(i-6);auto c =isPrime(i+6);if(a &&(b || c)){
cout<<i<<endl;return0;}}return0;}
只讨论一种情况
#include<iostream>#include<algorithm>#include<cmath>#include<unordered_map>usingnamespace std;
unordered_map<int,bool> mp;inlineboolisPrime(int x){if(x <=1)returnfalse;int sq =sqrt(x);for(int i =2; i <= sq; i++){if(x%i ==0)returnfalse;}returntrue;}intmain(){int N;
cin >> N;auto a =isPrime(N-6);auto b =isPrime(N);auto c =isPrime(N+6);if(a && b){
cout<<"Yes"<<endl;
cout<<N-6<<endl;return0;}elseif(b && c){
cout<<"Yes"<<endl;
cout<<N+6<<endl;return0;}
cout<<"No"<<endl;for(int i = N+1;1; i++){auto v =isPrime(i);if(!v)continue;auto u =isPrime(i-6);if(u){if(i-6< N) cout<<i<<endl;return0;}}return0;}