Primes

时间限制(普通/Java):1000MS/3000MS         运行内存限制:65536KByte
总提交:75          测试通过:42

题目描述

Wikipedia says: A twin prime is a prime number that differs from another prime number by two. Except for

the pair (2, 3), this is the smallest possible difference between two primes. Some examples of twin prime

pairs are (3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43),…

Write a program that generates the first 15 pairs of twin primes, beginning with (3,5). Display the pairs in

reverse order, so the last pair to be displayed will be (3,5).


输入

 

undefined

输出

 

Display each pair of values on a separate line, surrounded by parentheses and separated by a comma.

Examples are:

(17,19)

(11,13)

1386 H_PRC3

 

样例输入

 

样例输出

 

 

提示

 

undefined

 

题目来源

Internet

 

分析:首先进行素数预处理,判断相邻的两个素数差值是否为2,如果满足进行保存,倒序输出。

 

实现代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
int vis[100000],prime[100000];
int cnt=0;
int main()
{
    memset(vis,0,sizeof(vis));
    for(int i=2;i<=10000;i++)
    {
        if(!vis[i])
           prime[cnt++]=i;
        for(int j=i;j<=10000;j+=i)
            vis[j]=1;
    }
    int num=0,left[16],right[16];
    memset(left,0,sizeof(left));
    memset(right,0,sizeof(right));
    for(int i=1;i<cnt&&num<15;i++)
    {
        if(prime[i-1]+2==prime[i])
        {
              left[num]=prime[i-1];
              right[num]=prime[i];
              num++;
        }
    }
    for(int i=num-1;i>=0;i--)
    {
        printf("(%d,%d)\n",left[i],right[i]);
    }
}