51Nod-1106-质数检测
来源:互联网 发布:数据清洗包括什么 编辑:程序博客网 时间:2024/06/05 04:52
51Nod-1106-质数检测
1106 质数检测给出N个正整数,检测每个数是否为质数。如果是,输出"Yes",否则输出"No"。Input第1行:一个数N,表示正整数的数量。(1 <= N <= 1000)第2 - N + 1行:每行1个数(2 <= S[i] <= 10^9)Output输出共N行,每行为 Yes 或 No。Input示例523456Output示例YesYesNoYesNo
解题方法
该题可以直接暴力通过,当然,也可以用一些素数检测方法。
那些数学大师总结出的求质数的算法多种多样,如费马素数判定法、米勒-拉宾素数判定法和AKS素数测试等。
在这里我分别用暴力与费马素数判定法来解答此题。有兴趣的可以去看看其他算法。
暴力就不多解释了,说说费马素数判定法。它一个随机算法。
首先需要对费马小定理有一个基本的认识。
费马小定理的概括如下:
假如a是一个整数,p是一个质数,那么
如果a不是p的倍数,即a,p互质,定理也可以写成
也就是说随机取[1,n-1]中的值赋值给a,一旦不满足费马小定理则是合数(即不是质数),否则就是质数。
若是能翻墙的,可以去维基百科上看——质数
这上面列举了很多方法。
解题代码
暴力求解质数代码, 暴力速率太慢。
import mathdef isprime(n): if n < 2: return False if n == 2: return True N = int(math.sqrt(n)+1) for i in range(2,N): if n % i == 0: return False return TrueN = int(input())for _ in range(N): a = int(input()) if isprime(a): print('Yes') else: print('No')
费马素数判定法代码。
import randomdef isprime(n, k=128): if n<2: return False #循环次数是自定义的,适当次数不要太小 for _ in range(k): #随机取值赋值给a a = random.randrange(1, n) #判断是否符合费马小定理,不为1即不符合 if pow(a, n-1, n)!=1: return False return TrueN = int(input())for _ in range(N): print('Yes' if isprime(int(input())) else 'No')
阅读全文
0 0
- 51nod 1106 质数检测
- 51nod 1106 质数检测
- 51nod-1106质数检测
- 51nod 1106 质数检测
- 51nod-【1106 质数检测】
- 51NOD 1106质数检测
- 51Nod 1106 质数检测
- 【51Nod】1106 质数检测
- 51Nod-1106-质数检测
- 51Nod 1106 质数检测
- 51Nod-1106 质数检测
- 51 Nod 1106 质数检测
- 51nod 1106 质数检测
- 【51nod】1106 质数检测
- 51Nod-1106-质数检测
- 【51nod】1106 质数检测 埃拉托斯特尼筛法
- 51nod-1186 质数检测
- 20140915 【 数论 - Miller_Rabin素数测试 】 51nod 1106 . 质数检测
- POJ 1276 Cash Machine
- 每天学习一个linux命令--lsof
- ElasticSearch基本概念
- C#中using的使用方法
- ln软连接和硬连接的区别和联系
- 51Nod-1106-质数检测
- Apache Ranger中Yarn插件使用问题
- 51 NOD 1417 天堂里的游戏(博弈)
- Ubuntu 网卡配置
- 32:行程长度编码
- MySql的Blob字段报错:Data truncation: Data too long for column 'CONTENT' at row 1
- [编程题] 涂棋盘
- SpringBoot利用redis集成消息队列
- 卷积神经网络的一些改进操作