首页 > 试题广场 >

给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正

[问答题]
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。如,输入为10,程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5)(3.7))

思路
思路很简单,如果该数为质数,并且输入值 - 该数也为质数,则组成一个质数对。

import java.util.Scanner;

public class Main2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int inputValue = scanner.nextInt();
        System.out.println(getCount(inputValue));
    }

    // 主程序
    static int getCount(int inputValue) {
        // 因为质数对不能重复,所以判断一半即可,即 (1,5) 和 (5, 1) 一样
        int length = inputValue / 2 + 1;
        int res = 0;
        for (int i = 1; i < length; i++) {
            if (IsPrime(i) && IsPrime(inputValue - i)) {
                res++;
            }
        }
        return res;
    }

    // 判断该值是否为质数
    static boolean IsPrime(int inputValue) {
        int endValue = (int) (Math.sqrt(inputValue) + 1);
        for (int i = 2; i < endValue; i++) {
            if (inputValue % i == 0) {
                return false;
            }
        }
        return true;
    }
}
发表于 2020-06-22 20:51:19 回复(1)
#include <iostream>
#include <cmath>
using namespace std;
bool isPrimeNum(int num)//判断质数 
{
if(num<=1) 
{
   cerr<<"num error!"<<endl;
}
if(num==2) return true;
if(num%2==0) return false;
for(int i=3;i<=sqrt(num);++i)
{
if(num%i==0) return false;
}
return true;
}

int main()
{
 int num=0;
 int res=0;
 cin>>num;
 if(isPrimeNum(num-2)) ++res;
 for(int i=3;i<=num/2;i++)
 {
if(isPrimeNum(i)&&isPrimeNum(num-i)) ++res; 
}
cout<<res<<endl;
return 0;
}
发表于 2017-03-25 22:07:55 回复(0)
# -*- coding:utf-8 -*-

def getPrime(num): #判断一个数是不是质数
    for i in range(2,num):
        if (num%i) == 0:
            return False
            break
    return True
def count_sumprime(num):
    prime_list = []
    for i in range(2,num):
        if getPrime(i)== True:
            prime_list.append(i)  #记录2到num-1区间所有的质数
    counts = 0
    for n1 in prime_list:
        if (num - n1) in prime_list and n1 <= (num - n1):
            counts += 1
    return counts

if __name__ == '__main__':
    number = input()
    print count_sumprime(number)
发表于 2017-08-04 18:41:17 回复(0)
python 实现
#判断是否为质数
def isprime(num):
for i in range(2, num):
if (num % i) == 0:
return False
break
else:
i = i + 1
return True

#将质数存入列表中
def getprime(number):
Input = number
lis = []
for j in range(1, Input+1):
if(isprime(j)):
lis.append(j)
return lis

#求质数对
def sum_prime(numbers):
lis1 = getprime(numbers)
# return lis1
length = len(lis1)
count = 0
for i in range(0,length):
for j in range(0, length):
if (lis1[i] + lis1[j]) == numbers:
count += 1
if (numbers % 2) == 0:
count = count//2 + 1
else:
count = count//2
return count

if __name__ == '__main__':
# prime = getprime(11)
prime = sum_prime(5)
print(prime)
发表于 2017-04-03 16:18:58 回复(1)