数据结构和算法 数论 素数/质数、回文素数
一、素数概述
素数是初等数论中重点研究的对象,早在公元前300年,当时古希腊著名数学家欧几里得发现了数论的本质是素数。欧几里得在其著作《几何原本》中证明了素数具有无穷多个。
素数又称为质数,指在一个大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数。比1大,但不是素数的称为合数。0和1既不是素数也不是合数。
素数的分布没有很明显的规律,仍然有很多伟大的数学家对其进行研究。例如,最早的欧几里得、17世纪法国的费尔马、法国的梅森等。
谈到素数,有著名的算术基本定理:任何一个大于1的正整数n,可以唯一表示成有限个素数的乘积。
围绕着素数,数学家提出了各种猜想,内容如下。
・黎曼猜想:黎曼研究发现,素数分布的绝大部分猜想都取决于黎曼zeta函数的零点位置。黎曼在此基础上,猜想那些非平凡零点都落在复平面中实部为1/2的直线上。
・孪生素数猜想:对于素数n,如果n+2同样为素数,则称n和n+2为孪生素数。到底有没有无穷多个孪生素数呢?这是一个至今仍无法解决的问题。
・哥德巴赫猜想:哥德巴赫通过大量的数据猜测,所有不小于6的偶数,都可以表示为两个奇素数之和。后人将其称为“1+1”。并且,对于每个不小于9的奇数,都可以表示为三个奇素数之和。哥德巴赫猜想是数学中的璀璨明珠,至今仍无实质性进展。
近年来,素数在密码学上也有相应的应用。基于大的素数质因数分解的复杂性,从而构造出广泛应用的公钥密码。这是现代密码学的基础。
1、查找素数方法一
计算步骤
1、如果整数小于等于 1,则返回 False。
2、如果给定的数字可以被从 2 到 n 的任何数字整除,则函数将返回 False
3、否则它将返回 True
这是一种简单的方法,但需要很长时间才能运行。
import time
def is_prime(n):if n <= 1:return Falsefor i in range(2,n):if n % i == 0:return Falsereturn True# Driver function
t0 = time.time()
c = 0 #for countingfor n in range(1,100000):x = is_prime(n)c += x
print("Total prime numbers in range :", c)t1 = time.time()
print("Time required :", t1 - t0)
2、查找素数方法二
计算步骤
1、如果整数小于等于 1,则返回 False。
2、现在,我们将需要检查的数字减少到给定数字的平方根。
3、如果给定的数字可以被从 2 到该数字的平方根的任何数字整除,则该函数将返回 False
4、否则它将返回 True
import math
import time
def is_prime(n):if n <= 1:return Falsemax_div = math.floor(math.sqrt(n))for i in range(2, 1 + max_div):if n % i == 0:return Falsereturn True# Driver function
t0 = time.time()
c = 0 #for countingfor n in range(1,100000):x = is_prime(n)c += x
print("Total prime numbers in range :", c)t1 = time.time()
print("Time required :", t1 - t0)
3、查找素数方法三
计算步骤
1、如果整数小于等于 1,则返回 False。
2、如果数字等于 2,它将返回 True。
3、如果数字大于 2 且可被 2 整除,则返回 False。
4、4现在,我们检查了所有偶数。现在,寻找奇数。
5、如果给定的数字可以被从 3 到该数字的平方根之间的任何数字整除,跳过所有偶数,该函数将返回 False,否则它将返回 True
import math
import time
def is_prime(n):if n <= 1:return Falseif n == 2:return Trueif n > 2 and n % 2 == 0:return Falsemax_div = math.floor(math.sqrt(n))for i in range(3, 1 + max_div, 2):if n % i == 0:return Falsereturn True# Driver function
t0 = time.time()
c = 0 #for countingfor n in range(1,100000):x = is_prime(n)c += x
print("Total prime numbers in range :", c)t1 = time.time()
print("Time required :", t1 - t0)
4、生成素数的列表
此方法打印所有小于或等于给定数 n 的素数。例如,如果 n 为 10,则输出应为“2, 3, 5, 7”。如果 n 为 20,则输出应为“2, 3, 5, 7, 11, 13, 17, 19”。
这种方法被认为是生成所有小于给定数 n 的素数的最有效方法。它被认为是生成素数列表的最快方法。此方法不适合检查特定数字。此方法适用于生成所有素数的列表。
import time
def SieveOfEratosthenes(n):# 创建一个布尔数组“prime[0..n]”并将所有条目初始化为真。 如果 i 不是素数,则 prime[i] 中的值最终将为假,否则为真。prime = [True for i in range(n+1)]p = 2while(p * p <= n):# 如果 prime[p] 没有改变,那么它是一个素数if (prime[p] == True):# Update all multiples of pfor i in range(p * p, n + 1, p):prime[i] = Falsep += 1c = 0# Print all prime numbersfor p in range(2, n):if prime[p]:c += 1return c# Driver function
t0 = time.time()
c = SieveOfEratosthenes(100000)
print("Total prime numbers in range:", c)t1 = time.time()
print("Time required:", t1 - t0)
二、回文素数
1、概述
回文素数是一种具有特殊性质的素数,其既是素数又是回文数。而所谓回文数,即从左向右读与从右向左读是完全一样的自然数,例如,11、22、101、222、818、12321等。
回文素数即从左向右读与从右向左读是完全一样的素数。典型的回文素数如下:
11、101、131、151、181、191、313、……。
回文素数往往与记数系统的进位值有关。目前,数学家仍无法证明在十进制中是否包含无限多个回文素数。
在其他进制中也有回文素数的概念,例如,在二进制中,回文素数包括梅森素数和费马素数。
2、判断是否回文素数
#include<stdio.h>
int main()
{ int n,r,sum=0,temp;printf("enter the number=");scanf("%d",&n);temp=n;while(n>0) { r=n%10; sum=(sum*10)+r; n=n/10; } if(temp==sum) printf("palindrome number ");else printf("not palindrome");return 0;
}
数据结构和算法 数论 素数/质数、回文素数相关推荐
- Java黑皮书课后题第6章:**6.26(回文素数)回文素数是指一个数同时为素数和回文数。编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开
6.26(回文素数)回文素数是指一个数同时为素数和回文数.编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开 题目描述与运行示例 代码 题目描述与运行示例 6.26(回文素数) ...
- 求1-1000以内的回文素数。回文素数指的是这个数既是回文数又是素数。
求1-1000以内的回文素数.回文素数指的是这个数既是回文数又是素数. 题目:求1-1000以内的回文素数.回文素数指的是这个数既是回文数又是素数. 程序分析:回文数就是将一个数从左向右读是一样的.定 ...
- NUC1214 回文素数【回文+素数】
回文素数 时间限制: 1000ms 内存限制: 65536KB 问题描述 151 是一个回文素数,因为它既是一个素数又是回文数(回文数是指一个数 从左到右 和 从右到左 读的结果一样). 试写一个程序 ...
- python代码 素数集合 回文素数,反素数,梅森素数,双素数
回文素数是指一个数既是素数也是回文数.例如:131既是素数也是回文数.编写程序显示钱100个回文素数.每行显示10个素数,并且能准确对齐 import mathdef is_palindrome(nu ...
- python描述回文素数_回文素数-随心随性无为而为-51CTO博客
问题描述: 所谓回文素数是指,对一个整数n从左向右和从右向左读结果值相同且是素数,即称为回文素数. 求不超过1000的回文素数. 我的代码:import math def prime(m): coun ...
- Java数据结构与算法(12) - ch06递归(回文anagram)
{TODO} 转载于:https://www.cnblogs.com/thlzhf/p/4088905.html
- Day7 牛客 回文素数
Day7 牛客 回文素数 1. 回文素数 2. 回 1. 回文素数 解题思路: 先逐个判断这区间的数是否为素数,在将int型数字转为字符串,借助stra[::-1] 将字符串反转,再判断反转前后的字符 ...
- Bailian3247 回文素数【素数+回文】(POJ NOI0113-11)
问题链接:POJ NOI0113-11 回文素数. 回文素数 总时间限制: 5000ms 内存限制: 65536kB 描述 一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如121, ...
- python 回文素数
回文素数 描述 回文素数是指一个数既是素数又是回文数.例如,131,既是素数又是回文数. 用户输入一个正整数 n , 请你在一行内输出从小到大排列的的前n个回文素数,数字后面用一个空格进行分隔. ...
- 《算法0基础100讲》(第7讲)素数判定——866.回文素数
1.素数 <1>定义: 一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数. <2>证明为素数 ...
最新文章
- 美通信与动力公司向WIN-T军事通信计划提供支持
- [Android]webview直接加载网页允许JS,进度条,当前应用内跳转
- ICDM 2019最佳论文:从图片、文本到网络结构数据翻译,一种新型的多属性图翻译模型
- linux的周期计划任务叫atd,linux计划任务
- linux php ldap扩展,php_ldap域集成模块安装-159
- Python 虚拟环境:Virtualenv
- 再次携号转网_“携号转网”日期再次确定!这三个开头的号码,可以优先办理转网...
- GDB调试程序-Ubuntu
- js怎么设置z index.html,HTML5 Canvas set z-index
- 《Python Cookbook 3rd》笔记(1.17):从字典中提取子集
- 数据:以太坊2.0合约余额新增1.16万ETH
- HTML5应用程序缓存实现离线Web网页或应用
- 哈理工oj1003 Tiles of Tetris, NOT!
- gartner 服务器虚拟化 市场份额 2013,Gartner:VMware成虚拟化魔力象限领导者
- 从计算机视觉到人脸识别:一文看懂颜色模型、信号与噪声
- 《深度学习入门-基于Python的理论与实现》第七章带读 -- CNN介绍
- eclipse设置护眼豆沙色
- linux关闭防火墙后台 启动文件,centos——部署springboot项目(含启动脚本编写、开机自启脚本编写、守护进程开机二合一脚本编写)...
- kappa一致性检验教程_Kappa一致性分析
- Kettle: 合并记录
热门文章
- 瑟瑟发抖小网工之ISIS协议
- gbdt算法_双色球最简单的算法
- js定义对象时属性名是否加引号问题
- 数论著作读书笔记(2013-04-14 23:22)
- C#/VB.NET 合并PDF页面
- 硬盘安装manjaro linux,安装Manjaro Linux的详细步骤
- iOS GPS定位减小精度误差的几种处理方法
- 反恐精英代码_Steam永久降价通知!绝地求生史低促销!CS:GO源代码泄漏!
- 凯恩帝k1000ti参数设置_凯恩帝KND数控K1000TI系统维修
- 面试官:什么是TCP粘包?粘包原因?如何解决?