一、素数概述

素数是初等数论中重点研究的对象,早在公元前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;
}   

数据结构和算法 数论 素数/质数、回文素数相关推荐

  1. Java黑皮书课后题第6章:**6.26(回文素数)回文素数是指一个数同时为素数和回文数。编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开

    6.26(回文素数)回文素数是指一个数同时为素数和回文数.编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开 题目描述与运行示例 代码 题目描述与运行示例 6.26(回文素数) ...

  2. 求1-1000以内的回文素数。回文素数指的是这个数既是回文数又是素数。

    求1-1000以内的回文素数.回文素数指的是这个数既是回文数又是素数. 题目:求1-1000以内的回文素数.回文素数指的是这个数既是回文数又是素数. 程序分析:回文数就是将一个数从左向右读是一样的.定 ...

  3. NUC1214 回文素数【回文+素数】

    回文素数 时间限制: 1000ms 内存限制: 65536KB 问题描述 151 是一个回文素数,因为它既是一个素数又是回文数(回文数是指一个数 从左到右 和 从右到左 读的结果一样). 试写一个程序 ...

  4. python代码 素数集合 回文素数,反素数,梅森素数,双素数

    回文素数是指一个数既是素数也是回文数.例如:131既是素数也是回文数.编写程序显示钱100个回文素数.每行显示10个素数,并且能准确对齐 import mathdef is_palindrome(nu ...

  5. python描述回文素数_回文素数-随心随性无为而为-51CTO博客

    问题描述: 所谓回文素数是指,对一个整数n从左向右和从右向左读结果值相同且是素数,即称为回文素数. 求不超过1000的回文素数. 我的代码:import math def prime(m): coun ...

  6. Java数据结构与算法(12) - ch06递归(回文anagram)

    {TODO} 转载于:https://www.cnblogs.com/thlzhf/p/4088905.html

  7. Day7 牛客 回文素数

    Day7 牛客 回文素数 1. 回文素数 2. 回 1. 回文素数 解题思路: 先逐个判断这区间的数是否为素数,在将int型数字转为字符串,借助stra[::-1] 将字符串反转,再判断反转前后的字符 ...

  8. Bailian3247 回文素数【素数+回文】(POJ NOI0113-11)

    问题链接:POJ NOI0113-11 回文素数. 回文素数 总时间限制: 5000ms 内存限制: 65536kB 描述 一个数如果从左往右读和从右往左读数字是相同的,则称这个数是回文数,如121, ...

  9. python 回文素数

    回文素数 描述 回文素数是指一个数既是素数又是回文数.例如,131,既是素数又是回文数. 用户输入一个正整数 n , 请你在一行内输出从小到大排列的的前n个回文素数,数字后面用一个空格进行分隔.‪‬‪ ...

  10. 《算法0基础100讲》(第7讲)素数判定——866.回文素数

    1.素数  <1>定义:  一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数.   <2>证明为素数 ...

最新文章

  1. 美通信与动力公司向WIN-T军事通信计划提供支持
  2. [Android]webview直接加载网页允许JS,进度条,当前应用内跳转
  3. ICDM 2019最佳论文:从图片、文本到网络结构数据翻译,一种新型的多属性图翻译模型
  4. linux的周期计划任务叫atd,linux计划任务
  5. linux php ldap扩展,php_ldap域集成模块安装-159
  6. Python 虚拟环境:Virtualenv
  7. 再次携号转网_“携号转网”日期再次确定!这三个开头的号码,可以优先办理转网...
  8. GDB调试程序-Ubuntu
  9. js怎么设置z index.html,HTML5 Canvas set z-index
  10. 《Python Cookbook 3rd》笔记(1.17):从字典中提取子集
  11. 数据:以太坊2.0合约余额新增1.16万ETH
  12. HTML5应用程序缓存实现离线Web网页或应用
  13. 哈理工oj1003 Tiles of Tetris, NOT!
  14. gartner 服务器虚拟化 市场份额 2013,Gartner:VMware成虚拟化魔力象限领导者
  15. 从计算机视觉到人脸识别:一文看懂颜色模型、信号与噪声
  16. 《深度学习入门-基于Python的理论与实现》第七章带读 -- CNN介绍
  17. eclipse设置护眼豆沙色
  18. linux关闭防火墙后台 启动文件,centos——部署springboot项目(含启动脚本编写、开机自启脚本编写、守护进程开机二合一脚本编写)...
  19. kappa一致性检验教程_Kappa一致性分析
  20. Kettle: 合并记录

热门文章

  1. 瑟瑟发抖小网工之ISIS协议
  2. gbdt算法_双色球最简单的算法
  3. js定义对象时属性名是否加引号问题
  4. 数论著作读书笔记(2013-04-14 23:22)
  5. C#/VB.NET 合并PDF页面
  6. 硬盘安装manjaro linux,安装Manjaro Linux的详细步骤
  7. iOS GPS定位减小精度误差的几种处理方法
  8. 反恐精英代码_Steam永久降价通知!绝地求生史低促销!CS:GO源代码泄漏!
  9. 凯恩帝k1000ti参数设置_凯恩帝KND数控K1000TI系统维修
  10. 面试官:什么是TCP粘包?粘包原因?如何解决?