3610 - 孪生素数

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

所谓孪生素数指的就是间隔为 2 的相邻素数,它们之间的距离已经近得不能再近了,就象孪生兄弟一样。

最小的孪生素数是 (3, 5),在 100 以内的孪生素数还有 (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), (59, 61) 和 (71, 73),总计有 8 组。

但是随着数字的增大,孪生素数的分布变得越来越稀疏,寻找孪生素数也变得越来越困难。那么会不会在超过某个界限之后就再也不存在孪生素数了呢?

孪生素数有无穷多对!这个猜想被称为孪生素数猜想,至今没有被严格证明。但借助于计算机我们确实可以找到任意大数范围内的所有孪生素数对。
输入正整数n(n<=1000000),求n以内(不含n)的所有孪生素数对的个数。

比如,当n=100的时候,100以内的孪生素数对的个数是8。

题目输入

题目输出

输入/输出样例

输入格式

100

输出格式

8

C++解答

#include<iostream>
using namespace std;
int isprime(int n)
{
	int i;
	for(i=2;i*i<=n;i++)
	{
		if(n%i==0)
		return 0; 
	} 
	return 1; 
} 
int main()
{
	int n,i;
	cin>>n;
	int a=0; 
	for(i=2;i<=n;i++)
	{
		if(isprime(i)==1&isprime(i+2)==1)
		a++; 
	} 
	cout<<a; 
	return 0; 
} 

Java解答

import java.util.Scanner;


public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int sum = 0;
		for(int i=2;i<=n;i++) {
			if(IsPrime(i) && IsPrime(i+2) && (i+2)<n)
				sum++;
		}
		System.out.println(sum);
	}
	static boolean IsPrime(int n) {
		for(int i=2;i*i<=n;i++) {
			if(n%i==0)
				return false;
		}
		return true;
	}
}