题目:孪生素数。如果i是素数,并且i+2也是素数,称这对数为孪生素数,输出k组孪生素数。
分析:数论。打表计算素数(数据比较大用线性筛法会快一些),然后判断相邻的素数是不是差2即可
(相邻的素数至少差2,除了2与3,因为除了2都的素数是奇数(⊙_⊙))
说明:╮(╯▽╰)╭,又要赶项目了╮(╯▽╰)╭。
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int visit[20000002];
int prime[1271000];
int twinp[1271000];
int main()
{
for ( int i = 0 ; i < 20000001 ; ++ i )
visit[i] = 0;
int count = 0;
for ( int i = 2 ; i < 20000001 ; i ++ ) {
if ( !visit[i] ) prime[count ++] = i;
for ( int j = 0 ; j<count&&i*prime[j]<20000001 ; ++ j ) {
visit[i*prime[j]] = 1;
if ( !(i%prime[j]) ) break;
}
}
int number = 1;
for ( int i = 0 ; i < count ; ++ i )
if ( prime[i]+2 == prime[i+1] )
twinp[number ++] = prime[i];
int n;
while ( ~scanf("%d",&n) )
printf("(%d, %d)\n",twinp[n],twinp[n]+2);
return 0;
}