B1007 素数对猜想

让我们定义\(d_n\)为:\(d_n =p_{n+1}−p_n\),其中\(p_i\)是第i个素数。显然有\(d_1=1\),且对于n>1有\(d_n\)是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N(<10^5),请计算不超过N的满足猜想的素数对的个数。

输入格式:

输入在一行给出正整数N。

输出格式:

在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

思考

先搞出10000的素数表来

const int MAXN=10009;
bool isPrime[MAXN];
void initPrime()
{
int i,j;
for(i=0;i<MAXN;i++)
isPrime[i]=true;
isPrime[0]=false;
isPrime[1]=0;
for(i=2;i<MAXN;i++)
{
if(isPrime[i]==true)
for(j=i*i;j<MAXN;j+=i)
{
isPrime[j]=false;
}
}
}

20以内的素数是:

2、3、5、7、11、13、17、19、23

3-2=1

5-3=2

7-5=2

11-7=4

13-11=2

17-13=4

19-17=2

有4个结果是2,所以输出20,输出4

我生成了一个素数表,但是这种办法没有单独记录素数序列。

num记录了素数的个数,那么这个数是奇数还是偶数?无所谓,因为只有num-1个距离

上了10的5次方的素数表便怎么样?

附上我的最后一个测试点段错误的代码

#include<cstdio>
#include<cstring> const int MAXN=10009;//const int MAXN=110050(非筛法);或者是1000001(筛法)
bool isPrime[MAXN];
int prime[MAXN];
void initPrime()
{
int i,j;
for(i=0;i<MAXN;i++)
isPrime[i]=true;
isPrime[0]=false;
isPrime[1]=false;
for(i=2;i<MAXN;i++)
{
if(isPrime[i]==true)
for(j=i*i;j<MAXN;j+=i)
{
isPrime[j]=false;
}
}
}
int main(void){
initPrime();
int j,N,d=0,count=0;
int num = 0;
scanf("%d",&N);
for(int i=0;i<=N;i++){
if(isPrime[i]==true)
prime[num++]=i;
}
for(j=0;j<num-1;j++){
d = prime[j+1] - prime[j];
if(d==2)
count++;
}
printf("%d",count);
return 0;
}

作者:哈哈菌

来源:CSDN

原文:https://blog.csdn.net/rbcryst/article/details/58223303

版权声明:本文为博主原创文章,转载请附上博文链接!

#include<cstdio>
#include<cmath>
bool judge(int a){
int flag=1;
int x=floor(sqrt(a));
int k=2;
if(a==1)
return 0;
while(k<=x&&a%k!=0)
k++;
if(k<=x)
return 0;
else
return 1;
}
int main(){
int N;
int num=0;
scanf("%d",&N);
if(N==1||N==2)
printf("0\n");
else{
for(int j=3;j<=N;j++){
if(judge(j)&&judge(j-2))
num++;
}
printf("%d\n",num);
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int pri[100110] = {0}; int prime(int a) {
if(a % 2 == 0 && a != 2) {
return 0;
}
for(int i = 3; i * i <= a; i++) {
if(a % i == 0) {
return 0;
}
}
return a != 1;
} int main() {
int n;
int sum = 0, sub = 0;
cin >> n;
for (int i = 2; i <= 100010; i++) { //一次性筛选出最大范围内的所有素数
if(prime(i)) {
pri[sub++] = i;
}
}
for(int i = 1; pri[i] <= n; i++) { //求出n以内的素数对的对数
if(pri[i] - pri[i - 1] == 2) {
sum++;
}
}
cout << sum << endl;
return 0;
}

作者:指点

来源:CSDN

原文:https://blog.csdn.net/hacker_zhidian/article/details/51582086

版权声明:本文为博主原创文章,转载请附上博文链接!

我的代码,对空间要求比较大,因为要预先打表。

人家的代码,则着重于素数的判断,而不是打表,另外,判断j与j-2都是素数,和我作相邻两素数差的思路不同。

这么看来10的5次方以内的素数,就有应用时不一定非要打表做的快,也可能判断做的快。

为什么筛法打表反而不能AC呢?玄学,筛法打表是效率更高的。应该是我的筛法没有同时生成序列,所以效率不如判断+序列。

使用筛法,可以很容易的产生素数以及范围,两种范围问题,只需要略作修改,即可实现两种条件限制。

最终使用筛法的AC代码

#include<cstdio>
#include<cstring> const int MAXN=1000009;
bool p[MAXN] ={0};
int prime[MAXN], num=0;
void initPrime(int n)
{
for(int i=2;i<= n;i++){//i < MAXN
if(p[i] == false){
prime[num++] = i;
//if(num >= n) break;//只需要n个素数
for(int j=i+i;j<MAXN;j+=i){
p[j] = true;
}
}
}
}
int main(void){
int j,N,d=0,count=0;
scanf("%d",&N);
initPrime(N);
for(j=0;j<num-1;j++){
d = prime[j+1] - prime[j];
if(d==2)
count++;
}
printf("%d",count);
return 0;
}

B1007 素数对猜想的更多相关文章

  1. PAT B1007 素数对猜想 (20 分)

    让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数.显然有d​1​​=1,且对于n>1有d​n​​是偶数.“素数对猜想”认为“存在无穷多对相邻且差为2的素 ...

  2. 【算法笔记】B1007 素数对猜想

    1007 素数对猜想 (20 分) 让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数.显然有d​1​​=1,且对于n>1有d​n​​是偶数.“素数对猜想 ...

  3. 【PAT】B1007 素数对猜想

    素数筛筛出规定范围内的所有素数存入数组 遍历数组,如果满足于后边的差2,计数器加加 #include <cstdio> const int maxn = 10000001; int pri ...

  4. PAT自测_打印沙漏、素数对猜想、数组元素循环右移、数字加倍重排、机器洗牌

    -自测1. 打印沙漏() 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号 ...

  5. PAT 1007. 素数对猜想 (20)

    让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数."素数对猜想"认为"存在无穷多对相邻且 ...

  6. PAT乙级 1007. 素数对猜想 (20)

    1007. 素数对猜想 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 让我们定义 dn 为:dn = ...

  7. PAT (Basic Level) Practise:1007. 素数对猜想

    [题目链接] 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数.“素数对猜想”认为“存在无穷多对相邻且差为2的素数”. ...

  8. PAT-乙级-1007. 素数对猜想 (20)

    1007. 素数对猜想 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 让我们定义 dn 为:dn = ...

  9. PAT_1007 素数对猜想

    今天想更的那道题现在还没A出来.先把下午做的一道题更新了吧.快零点了.无奈啊. 问题描述: 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n&g ...

随机推荐

  1. Spring自动注入有关的注解

    Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. 1,@Comp ...

  2. UiPath Studio 快捷键

    掌握快捷键可以事半功倍,写一下比较重要的 1. Ctrl + J  插入代码片段 2. Ctrl + K  快速建变量 3. Ctrl + L  打开日志文件夹 4. Ctrl + F4  关闭当前机 ...

  3. synchronized重入后抛出异常,锁释放了吗

    synchronized: 用于同步方法或者代码块,使得多个线程在试图并发执行同一个代码块的时候,串行地执行.以达到线程安全的目的. 允许重入: 在多线程的时候是这样的,但是对于单线程,是允许重入的, ...

  4. html5标签的兼容性处理

    HTML5的语义化标签以及属性 1.可以让开发者非常方便地实现清晰的web页面布局,加上CSS3的效果渲染,快速建立丰富灵活的web页面显得非常简单 2.使用他们能让代码语义化更直观,而且更方便SEO ...

  5. weexpack 创建项目, 打包Android 和 ios

    1: 首先确保 node.js版本大于6.0, 不然使用 weexpack 时会报错(部分使用es6语言,node版本太低不支持es6) 下面所有都是命令行执行的命令 2: 全局安装 weexpack ...

  6. WPF学习一:XAML的资源(Resources)结构

    一个初学者,把知识做个积累,如果有不对的地方,还请高手指出,谢谢! 先看一段代码:(下面是以Window WPF进行讲解,如果是Web 的话就把<Window改为<Page 而如果是 Us ...

  7. web调试的一些小技巧

    1.不带缓存的刷新,用于刷新css或者js:Ctrl+F5 待续...

  8. html代码能让网页的横向滚动条默认居中

    在body 中加入 onload="window.scrollTo((document.body.scrollWidth-document.body.offsetWidth)/2,0)&qu ...

  9. linux 命令——25 linux文件属性详解

    Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组.最近访问或修改的时间等内容.具体情况如下: 命令: ls -lih 输出: [root@loca ...

  10. 使用Eclipse连接SAP云平台上的HANA数据库实例

    SAP云平台(Cloud Platform)上的HANA数据库实例有两种方式访问: 1. 通过SAP云平台的基于网页版的Development Tool:SAP HANA Web-Based Deve ...