题目来源
此题目是由本人岳阳楼蒟蒻写的,但因为鄙人不知如何实名认证,所以没正式发布
洛谷传送门
题目背景
八佬是一个初中生,在他们5班,有一个佬教。
他们的口号是"别那么佬啊!"“草色入(年轻)怕重”
这些人都讽刺八佬,所以八佬上厕所都要避着他们。
还有八佬喜欢质数,喜欢挑质数号的厕所间
题目描述
给定 N N N个厕所间,给定厕所间: A 1 . A 2 . . . A n A_{1}.A_{2}...A_{n} A1.A2...An的人数,当 A i A_{i} Ai的人数大于 2 2 2(不含 2 2 2),就是 A i > 2 A_{i}>2 Ai>2时,八佬就不去那个厕所间,八佬还会仔细挑厕所间,选号数 i i i为质数的厕所间。
因为八佬没开天眼,看不见有多少人在厕所间,所以请你帮忙挑出全部,如果没有那么告诉八佬"None"。
输入格式
N N N
A 1 , A 2 . . . A N A_{1} ,A_{2}...A_{N} A1,A2...AN
输出格式
K 1 K_{1} K1
K 2 K_{2} K2
o r or or None
样例
样例输入1
4
3 4 2 1
样例输出1
3
样例输入2
5
9 7 4 1 3
样例输出2
None
提示
样例 1 : 1: 1:有 3 , 4 3,4 3,4号厕所人少,又因为 3 3 3为质数,所以输出 3 3 3
样例 2 : 2: 2:有 4 4 4号厕所人少,又因 4 4 4不是质数,所以输出None
0 ≤ N ≤ 1 0 6 0\le N\le10^6 0≤N≤106
0 ≤ A i ≤ 1 0 5 0 \le A_{i} \le 10^{5} 0≤Ai≤105
解释
鄙人思路
首先看人数,然后看厕所的号码,最后输出号码 / i / i /i
代码
#include<bits/stdc++.h>
using namespace std;
long long n,a[1000005];
int main() {
bool f=0,flag[1000005];
ios::sync_with_stdio(false);
cin>>n;
for(int i=1; i<=n; i++) {
cin>>a[i];
}
int sqrt_n=sqrt(n);
for(int i=2; i<=sqrt_n; i++) {//线性筛
int n_i=n/i;
if(!flag[i])
for(int j=i; j<=n_i; j++)
flag[i*j]=true;
}
for(int i=2; i<=n; i++) {
if(!flag[i] && a[i]<=2) {
cout<<i<<"\n";
f=1;
}
}
if(!f)
cout<<"None\n";
return 0;
}