PTA(BasicLevel)-1007素数对猜想
一 问题描述-素数对
让我们定义素数差dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<),请计算不超过N
的满足猜想的素数对的个数。
输入格式: 输入在一行给出正整数N
。
输出格式: 在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例: 20
输出样例: 4
二 求解思路
求解出1到N范围内的素数,然后遍历此序列统计相邻素数差为2的素数对个数,重点在于判断素数的方法。
1. 枚举法-素数就是一个只能被1和自己整除的正整数
只有1和它本身两个因数的自然数是素数,否则就叫合数。
def isPrime( N ):""" judge whether N is a prime numberparam: N (int)retype: bool"""if N <= 1:return Falseelse:flag = True # from 2 to N-1for i in range(2, N):if (N % i) == 0:flag = Falsebreakreturn flag
2.
开方判断素数法-
N如果不能被小于等于它的平方根√N范围内的数整除,就是素数
假设N是一个合数,N = a*b,a为N的约数。a、b中肯定存在一个数>=根号N,另一个数<=根号N。 只要<=根号N的数不能整除N,那么N就不存在除1外的因数。则N为素数。
import math def isPrimeSqrt( N ):if N <= 1:return Falseelse:flag = Truenum = int( math.sqrt(N) )for i in range(2, num+1):if (N % i) == 0:flag = Falsebreakreturn flag
3.
埃氏素数筛法-从给定的数字序列中不断剔除2到N的倍数,直到不变
普通地做法就是累次地剔除能被2到N之间的数整除的数,剩下的就是素数。实际上,可以将除数范围调整到2到根号N,在根号N之前已经把所有能被整除的数剔除了。
from math import sqrtdef seive( N ):if N < 2:return []else:L = [ i for i in range(2, N+1) ] num = len(L)for i in range(2, int( sqrt(num) )+1 ):L = list( filter( lambda x: (x%i != 0) or x == i , L) ) return L
三 完整代码
python版本
import math def generatePrime( N ):prime = [ i for i in range(1,N+1) if isPrime(i) ]return primedef sievePrime( n ):""" Implement the seive og Eratosthenesparam: n (int)retype: list(int)"""A = [ i for i in range(n+1)]num = int( math.sqrt(n) )for p in range(2, num+1):if A[p] != 0: # p hasn't been eliminated on previous passes j = p * pwhile j <= n: # p*p <= nA[j] = 0 # mark element as eliminatedj = j + p # 剔除p的倍数L = [ item for item in A if item >= 2 ]return LN = int( input() ) cntPrimePair = 0 differ = 0 #for i in N: #primes = generatePrime( N ) primes = sievePrime( N ) length = len(primes) for i in range(length):if i < (length - 1):differ = primes[i+1] - primes[i]if differ == 2:cntPrimePair += 1 print(cntPrimePair)
C语言版本
#include <stdio.h>int isPrime( int N ) { /* 穷举法判断素数 */if ( N <= 1 ) {return 0; } else {int flag = 1;for ( i = 2; i < N; i++ ) {if ( (N % i) == 0 ) {flag = 0;break;}}return flag; } } int isPrimeSqrt( int num ) {int flag = 1;int N = sqrt(num);int i;for ( i = 2; i <= N; i++ ){if (num % i == 0) {flag = 0;} }return flag; }int generatePrime( int primes[], int N ) {int i, j;for ( j = 0, i = 1; i <= N; i++ ) {if ( isPrimeSqrt(i) ) {primes[j++] = i;}}return j; /* prime index */ }int main(int argc, char *argv[]) {int i, N, border;int differ, cntPrimePair;border = differ = cntPrimePair = 0;scanf("%d", &N);int primes[N];for ( i = 0; i < N; i++ ) {primes[i] = 0;}border = generatePrime( primes, N );for ( i = 0; i < (border-1); i++ ) {differ = primes[i+1] - primes[i];//printf("differ %d\n", differ);if ( differ == 2 ) {cntPrimePair += 1; }} printf("%d\n", cntPrimePair);return 0; }
View Code
转载于:https://www.cnblogs.com/justLittleStar/p/10675816.html
PTA(BasicLevel)-1007素数对猜想相关推荐
- C++学习之路 | PTA乙级—— 1007 素数对猜想 (20分)(精简)
1007 素数对猜想 (20分) 让我们定义d n 为:d n =p n+1 −p n ,其中p i 是第i个素数.显然有d 1 =1,且对于n> ...
- PAT-B 1007.素数对猜想
1007. 素数对猜想 让我们定义 $d_n$ 为:$d_n = p_{n+1} - p_n$,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 $d_n$ 是偶数."素数对 ...
- 【PAT】1007. 素数对猜想 (20)
1007. 素数对猜想 (20) 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数."素数对猜想" ...
- 1007 素数对猜想 (20分)
1007 素数对猜想 (20分) 让我们定义 为:dn=pn+1−pnd_{n} = p_{n+1} - p_{n}dn=pn+1−pn,其中pip_{i}pi是第iii个素数.显然有d ...
- 1007 素数对猜想(C语言)
1007 素数对猜想 (20 分) 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数 ,给定任意正整数N(<10 ...
- 1007 素数对猜想 (20 分)
1007 素数对猜想 (20 分) 让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数.显然有d1=1,且对于n>1有dn是偶数."素数对猜想"认为"存在 ...
- 1007 素数对猜想 (20分)(C语言)
1007 素数对猜想 (20分) 让我们定义d n 为:d n =p n+1 −p n ,其中p i 是第i个素数.显然有d 1 =1,且对于n> ...
- PAT (Basic Level) Practice (中文)1007 素数对猜想 (20 分)
题目 让我们定义dn 为:dn =pn+1 −pn ,其中pi 是第i个素数.显然有d1 =1,且对于n>1有dn 是偶数."素数对猜想" ...
- 1007 素数对猜想 (20 分)(c语言)
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数.显然有d1=1,且对于n>1有dn是偶数."素数对猜想"认为"存在无穷多对相邻且差为2的 ...
最新文章
- Atitit java 二维码识别 图片识别
- java pom.xml 自定义变量
- 基站基带fgpa 服务器芯片,基于FPGA的AIS基带数据处理芯片设计
- 自动化运维工具——ansible安装及模块介绍
- TMDS——最小化传输差分信号及其协议
- NoSql数据库:Cassandra,Mongo,Redis数据库比较
- 1024 程序员节专题论坛来袭,聚焦企业级开源数据库 openGauss
- 去掉烦人的 “ ! = null (判空语句)
- iOS协议、代理、Block和回调、类别
- 如何扩展/删除swap分区
- MySQL——几种常见的嵌套查询
- ogg是什么格式的文件后缀
- CAN总线物理值与原始值
- 汇编语言期末不挂科必备复习知识点
- 项目经理如何做好授权管理?
- 技术篇(二)Demo示例——Bundle打包和加载
- 绩效考核成绩管理平台
- htmlunit 使用代理IP
- Elasticsearch rest-high-level-client 基本操作
- 解决bug-python中关于Process finished with exit code -1073740791