本文主要是介绍NowCoder的密码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
牛客网题目链接
题意
全排列给出的数据,然后从这些全排列中选出素数输出。
注意
- 不存在素数时要输出NONE
- 每个测试数据间需要增加一个空行
#include <iostream>
#include <string>
#include <vector>
#include <cctype>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#include <cmath>
using namespace std;
bool check(int x)
{if(x==1)return false;if(x==2||x==3)return true;if(x%6!=1 && x%6!=5) return false;for(int i=5;i*i <= x; i+=6)if(x%i==0||x%(i+2)==0) return false;return true;
}
int main(){int n;char c;string str;while(cin>>n){if(!n) break;str="";while(n--){cin>>c;str = str + c;}sort(str.begin(), str.end());int flag = false;do{int x = stoi(str);if(check(x)) {flag = true;cout<<str<<endl;}}while(next_permutation(str.begin(), str.end()));if(!flag) cout<<"NONE"<<endl;cout<<endl;} return 0;
}
判断素数(尊享版)
原创博客
O ( s q r t ( n ) / 3 ) O(sqrt(n)/3) O(sqrt(n)/3)
根据质数分布规律:大于等于5的质数一定是和6个倍数相邻。
bool check(int x) {if(x == 2|| x == 3 ||x == 5) return true;if(x <= 5) return false;if(x%6 != 1 && x%6 != 5) return false;for(int i = 5; i*i <= x; i += 6){if(x % i == 0 || x % (i+2)==0) return false;}return true;
}
这篇关于NowCoder的密码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!