集训队日常训练20181110 DIV210 题解及AC代码

4375: 孪生素数 分享至QQ空间

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 324            Accepted:91

Description

 

所谓孪生素数指的就是间隔为 2 的相邻素数,它们之间的距离已经近得不能再近了,就象孪生兄弟一样。最小的孪生素数是 (3, 5),在 100 以内的孪生素数还有 (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), (59, 61) 和 (71, 73),总计有 8 组。但是随着数字的增大,孪生素数的分布变得越来越稀疏,寻找孪生素数也变得越来越困难。那么会不会在超过某个界限之后就再也不存在孪生素数了呢?

孪生素数有无穷多对!这个猜想被称为孪生素数猜想,至今没有被严格证明。但借助于计算机我们确实可以找到任意大数范围内的所有孪生素数对,接下来给定一个数k,求第k组孪生素数。

Input

 

输入数据有多组,每行为一个正整数k(1<= k <=10000)。

Output

 

输出有两个整数,以空格隔开,表示第k组孪生素数。

Sample Input

 1

Sample Output

 3 5

素数序列Pn,其中Pi+1-Pi=2为孪生素数(素数永远是人们着迷的话题,包括今年非常火的黎曼猜想)

我们可以知道,这个数并不多,但是让求的也不多,暴力走一波

1可以先预处理出这些数,判断x和x+2都是素数

Solution from kelenb

#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
bool x(int m)
{
    int i;
    int t=sqrt(m);
    for(i=2;i<=t;i++)
    {
        if(m%i==0)
        return false;
    }
    return true;
}
int main()
{    int a[15000];
    int i,j,n,k=0;
    for(i=3;i<1400000;i++)
    {
         if(x(i)&&x(i+2))
         a[k++]=i;
    }
    while(scanf("%d",&n)!=EOF)
    {
        printf("%d %d\n",a[n-1],a[n-1]+2);
    }
}

 

猜你喜欢

转载自www.cnblogs.com/BobHuang/p/9939855.html