首页 > 试题广场 >

素数对

[编程题]素数对
  • 热度指数:28867 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))

输入描述:
输入包括一个整数n,(3 ≤ n < 1000)


输出描述:
输出对数
示例1

输入

10

输出

2
# -*- coding: utf-8 -*-
# !/usr/bin/python3
# 解题思路:根据题意,从2到m // 2遍历,确定i和m - 1是否都为素数
# 如果都为素数,保存为一个结果,所有的结果都保存下来,数组的长度就是组合数


def is_prime(n):
    if n < 2:
        return False
    for k in range(2, n):
        if n % k == 0:
            return False
    return True


while True:
    try:
        m = int(input())

        ls = list()
        for i in range(2, m // 2 + 1):
            if is_prime(i) and is_prime(m - i):
                ls.append((i, m - i))

        print(len(ls))

    except:
        break

发表于 2019-11-27 19:52:30 回复(0)
num = list(map(int, input().split()))[0]
primes = []
for n in range(2, 998):
    for i in range(2,998):
        if n!=i:
            if (n % i) == 0:
                break
    else:
        primes.append(n)
times=0
for p in primes:
    if p < num:
        for q in primes:
            if p+q==num:
                times += 1
print((times+1)//2)


编辑于 2019-08-30 10:55:21 回复(0)
n = int(input())
primes = [2, ]
for i in range(3, n):
    active = True
    for j in range(2, i):
        if i % j == 0:
            active = False
            break
        else:
            continue
    if active:
        primes.append(i)
pair = 0
for x in primes:
    if n-x in primes:
        pair += 1
pair = int(pair/2+0.5)
print(pair)
菜鸟参考了一下评论大神的代码改的,因为不太会处理数字1,2的j循环部分,干脆把2直接放到初始primes里面了
编辑于 2019-03-30 02:06:31 回复(0)

import sys

def issu(x):
    if x == 1 or x == 2:
        return False
    for i in range(2, x / 2 + 1):
        if x % i == 0:
            return False
    return True

n = sys.stdin.readline()
n = int(n)
num = 0

for i in range(2, n/2+1):
    if issu(i) and issu(n - i):
        num += 1

print num

发表于 2018-11-06 10:27:26 回复(0)
import math
n = int(input())
x = []
## 输出n以内的质数
for p in range(2,n):
    for q in range(2,math.ceil(p/2)+1):
        if p % q == 0:
            break
    else:
        x.append(p)

count = 0
## 判断质数对的和
for i in range(len(x)):
    for j in range(i,len(x)):
        if x[i] + x[j] == n:
            count += 1
print(count)
发表于 2018-09-05 02:05:10 回复(0)
n=int(input())
ans=[]
for i in range(2,n):
    for j in range(2,n//2+1):
        if i+j == n:
            a=[i,j]
            ans.append(a)
count=0
for item in ans:
    flag2=False
    flag1=False
    for i in range(2,item[0]//2+1):
        if item[0]%i==0 :
            break
    else:
        flag1=True
    for i in range(2, item[1] // 2 + 1):
        if item[1]%i==0 :
            break
    else:
        flag2=True
    if flag1 ==True and flag2 ==True:
        count += 1
print(count)

发表于 2018-08-31 21:22:15 回复(0)
def judge(n):
    if n<2:
        return 
    for x in range(2,n):
        if n%x==0:
            return 
    return True
def func(n):
    if n%2==1:
        return 0
    flag=0
    l=list(range(1,n+1,2))
    for x in l:
        if ((n-x) in l) and (judge(x)and judge(n-x)):
            flag+=1
            l.remove(n-x)
    return flag
n=int(input())
print(func(n))

发表于 2018-07-18 20:03:03 回复(0)
Python
from itertools import combinations_with_replacement
def sushu(n):
    if n == 1:
        return False
    for i in range(2,n):
        if n % i == 0:
            return False
    return True
n = int(input())
Sushuls = list(filter(sushu,[i for i in range(n)]))
print(len(list(filter(lambda x:x[0] + x[1] == n,combinations_with_replacement(Sushuls,2)))))

发表于 2018-07-08 20:46:12 回复(0)
n=int(input())

def _odd_iter():
    i = 1
    while True:
        i = i + 2
        yield i

def _not_divisible(i):
    return lambda x: x % i > 0

def primes():
    yield 2
    it = _odd_iter() # 初始序列
    while True:
        i = next(it) # 返回序列的第一个数
        yield i
        it = filter(_not_divisible(i), it) # 构造新序列

numbers=[]
for i in primes():
    if i < 1000:
        numbers.append(i)
    else:
        break
ans=0
for i in numbers:
    if (n-i) in numbers and i<=(n-i):
        ans+=1
print(ans)

发表于 2018-05-02 13:25:46 回复(0)
from math import sqrt


def isPrimeNumber(number):
    for i in range(2, int(sqrt(number) + 1)):
        if number % i == 0:
            return False
    return True


def getPrimeNumber(number):
    res = []
    for i in range(2, number + 1):
        if isPrimeNumber(i):
            res.append(i)
    return res


a = int(input())
res = 0
primes = getPrimeNumber(a)
for i in primes:
    if a - i in primes and i < a // 2 + 1:
        res += 1
print(res)
发表于 2018-04-13 15:03:57 回复(0)
data = [1 for i in range(1000)]
for i in range(2,1000):
    if (data[i]):
        for j in range(2,int(1000/i)):
            data[i*j] = 0
            
n = int(input())
x = 0
for i in range(2,int(n/2)+1):
    if data[i]&data[n-i]:
        x += 1
print (x)

发表于 2018-04-03 18:53:31 回复(0)
python解法,比较复杂,个人实力有限
import sys def if_prime(num):
    tmp=0  if num > 1: for i in range(2, num): if (num % i) == 0:
                tmp=tmp-1  return tmp else:
            tmp=tmp+1  return tmp else:
        tmp = tmp - 1  return tmp if __name__ == "__main__":
    a=int(sys.stdin.readline().strip())
    count=0  for i in range(1,int((a/2)+1)): if if_prime(i)+if_prime(a-i)>0:
             count=count+1  print(count)

发表于 2018-03-28 20:28:48 回复(0)
import math
end = int(input())
def isPrime(n):
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True
result = [x for x in range(3,end//2 + 1) if isPrime(x) and isPrime(end - x)]
print(len(result))

编辑于 2017-11-06 22:51:21 回复(0)
import math


def isOk(n):
    if n & 1 == 0:
        return False
    i = 3
    n_sqrt = math.sqrt(n)
    while i <= n_sqrt:
        if n % i == 0:
            return False
        i += 2
    return True


if __name__ == '__main__':
    N = int(input())
    ans = 0
    for i in range(1, N//2+1, 2):
        if isOk(i) and isOk(N-i):
            ans += 1
    print(ans)
发表于 2017-10-02 10:02:13 回复(0)