Python基础练习 1007 素数对猜想 (20 分)
本文已参与「新人创作礼」活动,一起开启掘金创作之路。
判断素数的方法:
先把除去2以外的偶数去掉,再判断奇数。
核心代码如下:
range(3, int(math.sqrt(x))+1, 2)
问题描述
让我们定义dn 为:dn =pn+1 −pn ,其中pi 是第i个素数。显然有d1 =1,且对于n>1有dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N(<100000 ),请计算不超过N的满足猜想的素数对的个数。
输入输出
- 输入格式
输入在一行给出正整数N。
- 输出格式
在一行中输出不超过N的满足猜想的素数对的个数。
- 样例输入
20
- 样例输出
4
Python版本 代码如下
本题的核心与难点在于素数的判断,需要牢记并掌握。
解释一下素数:素数一般是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。除了 1 和它本身以外,不能被任何整数整除的数。
import math
# 判断是否为素数
def sushu(x):
if x!=2 and x%2==0:
return False
else:
for i in range(3, int(math.sqrt(x))+1, 2):
if x%i==0:
return False
return True
n = eval(input())
L=[]
for i in range(2, n+1): ##存入素数
if sushu(i):
L.append(i)
con=0
for k in range(1, len(L)): ##判断
if L[k]-L[k-1]==2:
con+=1
print(con)
C语言版本 代码如下
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXN 10000
// 判断是否为素数
int isPrime(int num){
int flag = 1;
int temp = sqrt(num);
for(int i = 2; i <= temp; i++){
if(num % i == 0)
flag = 0;
}
return flag;
}
int main(){
int num;
scanf("%d", &num);
memset(a, 0, MAXN);
int cnt1 = 2, cnt2 = 0;
int a[MAXN];
a[2] = 2;
for(int i = 3; i <= num; i++){
if(isPrime(i)){
cnt1++;
a[cnt1] = i;
if((a[cnt1] - a[cnt1-1]) == 2){
cnt2++;
}
}
}
printf("%d", cnt2);
return 0;
}
参考学习:
blog.csdn.net/qq_40728667…
www.cnblogs.com/fyymonica/p…