标签:prime 标号 19 ++ 质数 新生 int 赋值
题目描述: hhs刚刚学会了如何判断一个数是质数,但现在hhs被一个与质数有关的问题难住了,求求你帮他解决这个问 题。问题如下: 如果质数在质数列表中也是质数,则称为质数中的质数。 例如:3 5分别是排第二和第三的质数,因此它们是 质数中的质数。 现在给出一个数字N,最小质数> = N中的质数是多少。(可以考虑用质数筛法来做)
输入格式: 输入一个数N(N <= 10^6)
输入格式: 输出>=N的最小的质数中的质数。
样例
输入 20
输出 31
代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e6;
int a[N+10],prime[N+10];
void init() { //初始化
int k=1;
for(int i=2; i<=N; i++) {
if(a[i]==0) {
for(int j=i+i; j<=N; j=j+i) {
a[j]=1;
}
prime[i]=k++;
}
}
/* 初始时,i=2 ,a[2]不存在(未赋值),满足a[2]==0,往下进行,那么a[4]=1,a[6]=1……,都由不存在(未赋值)变为存在(已经赋值)
// prime【2】=1 质数2的标号为1
//prime 【3】=2 质数3的标号为2
当i=4,因为a【4】==1,已经存在,不满足a【i】==0,则直接跳过
prime 【5】=3 质数5的标号为3
因为,质数3的标号2、质数5的标号3也为质数,所以3和5被称为质数中的质数。*/
}
int main() {
init();
int n,i;
cin>>n;
for( i=n; a[i]==1||a[prime[i]]==1; i++); //a[i]==1||a[prime[i]]==1 因为只要a【i】==1,那么i就不是质数 a【i】==1判断是否为质数,
// a[prime[i]]==1判断是否为质数中的质数,因为 是||,那么满足其中一个,i++
cout<<i<<"\n"; //如果两者都不满足,那么输出i
return 0;
}
先将质数筛选出来,再判断
标签:prime,标号,19,++,质数,新生,int,赋值 来源: https://www.cnblogs.com/QingyuYYYYY/p/11617329.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。