求100以内素数的5中基本方法及其优化

求100以内素数的5中基本方法及其优化
方法1 基本做法


错解比较:进入了小循环:有时加pass也可以。
错解:

这里的print也同样注意不要写到循环内。

注释:
1.两种条件运用:为合数。
2.以上错误点。

方法二

注释;1.条件运用,质数除了2都是奇数,因为偶数都能被除了自身外的2整除。改进自1
2.偶数除了2都不是质数。
3.第二个for写的是到开方的奇数。
4.奇数含有质数和非质数。偶数除了2一定不是质数。所以先剥离了偶数。

方法三:使用列表


注释:1.break continue pass
2.质数i依然是从奇数中选。
3.条件应用,一个数如果能被一个素数整除,那它是合数。
4.用列表primenumber[]存储质数作为被除数。

方法四 本做法及优化
1.本做法

注释:
1.利用以前的结果,把之前的质数结果用起来了。得知道一些规律。质数等于质数的乘机
记住一些记好了。冒泡法(算法)记不住,所以换算法。
2.if i>x0.5,即i都大于x0.5依然未被整除(因为未走上一个分支,相当于截胡在这里,而来/走这个分支)。
拿一定是质数。上边一个if相当于判断是否是合数。下边的是在上边的基础上告知你都到x**0.5,依然未被break,
肯定是质数。??两个If与上边for 的关系,是否如上所述:先走上边if循环,如果还未被整除,那么。
测试:发现是一个数值x先走了两个if.相当于一根管子有两个阀门。是直的

测试:
测时间差,看优化性

2.on优化。每次都开方太耗时。放在相应的循环层次上减少循环每次都计算/分摊平方。

方法五 条件:大于3的素数只有6N+1和6N-1两种形式,但反过来不成立。但是比如25(非质数)和23,是这种,但不成立。也即23没有孪生质数。
**推到出其他隐藏情况【除了2,3】
1.6N只表示6的倍数,各个数字的N不尽相同,N相同的情况下互为孪生,N=1比如5 7。
2.排序的话N是一位一位往上加的依次是N=1 5 7 ; N=2 11 13 ....。
3.由此推到出两个相邻的孪生组的相接的两个数的差为4,孪生组之间的差为2(delta=6N+1-6N+1=2)。本体为依次隐藏情况为打码解题条件。(或通过看下边的列举,得出结论,有可能是错误的特别是含有倍数的情况,越往上随着循环还会delta更大如下应该是2,4,2,4,...,2,4,6)

孪生素数即6n+1与6n-1。而其

Range函数只定值一次。相当于不变。所以补偿该此案放在下边。

4.**错误:打印未在else循环内,打印出的必然是未经筛选的

正确:print要在else内,否则无法筛选25等。print要在x +=前,否则累加的25等也会被打印。即非质数的6N+1。

原文地址:http://blog.51cto.com/13889496/2158298

时间: 2024-08-10 11:54:48

求100以内素数的5中基本方法及其优化的相关文章

Java简单算法--求100以内素数

package cn.magicdu.algorithm; /** * 打印素数 * * @author xiaoduc * */ public class Prim { public static void main(String[] args) { for(int i=1;i<=100;i++){ if(isPrime(i)){ System.out.println(i); } } } /** * 判断是否是素数 * @param num * @return */ private stati

Java求100以内的质数的四种方法

质数: 又称素数,只能被1和它本身整除的数就是质数. 难点: 需要两层循环,外层循环99遍: 内层循环,控制除数为2到98(也就是2到被除数前面的一个数). 为什么从2开始?因为所有数都能被1整除. 需要定义一个变量flag来记录某个数是不是质数 内层循环结束后需要重新把flag重置为true 方法一: import org.junit.Test; public class Demo { @Test public void primeNumberTest() { boolean flag = t

用筛选法求100以内的素数(数组)

用筛选法求100以内的素数,要求使用数组. #include "stdafx.h" #include<iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int a[100],i,b[100],j,n=0;     //数组a[100]来放用于判断的数,数组b[100]来放素数 for(i=0;i<100;i++)       //注意这里i不能从1开始,因为数组a的首位是a[0]

Python 小议2:用循环和递归函数分别求100以内的数字的加法和乘法。

今晚看了函数的递归,在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.递归函数的优点是定义简单,逻辑清晰.理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰. 联想到之前用循环写的关于求一百以内的数的和,目前看来基本上有三种写法: 1. for 循环 sum = 0 for i in range(1,101): sum = sum +i print sum 2 while 循环: sum =0 i =1 while i <101: sum =

python ---求100以内的质数有哪些

#coding=utf8 #求100以内的质数有哪些 #质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数 #for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while - else 也是一样. list = [] def f(n): for i in range(2,101): #如果for循环中存在一个满足这个条件,直接break跳出for循环,不执行else #如果for循环中没有一个满足该条

求100以内的质数

求100以内的质数. 1 num = [2] 2 i = 3 3 while i < 101: 4 j = 2 5 while j < i: 6 if i % j == 0: 7 break 8 else: 9 j = j + 1 10 continue 11 else: 12 num.append(i) 13 i = i + 1 14 print(num)

关于求N以内素数的python实现以及优化方法

大纲: 摘要 一.素数的定义 二.N以内素数常用实现方法 三.优化方法 原理层面 代码层面 range和xrange while 1和while True真的重要吗 摘要 本文主要是参考<编程珠玑-续订版>第一章关于求素数的解释,描述素数的定义,以及N以内素数的常用求解方法,最后一步步给出优化方法.代码用python实现两个优化方法,并给出原理层面和代码层面的分析.其中比较有意思的是,最后的部分,最开始代码写的只是考虑功能实现,而没有考虑怎样优化,最后的结果却大跌眼镜.反思之后,发现代码中的问

python求100以内的素数

for i in range(2,101): j = 2 while j < i: if i % j == 0: break j += 1 # i % j == 0不成立,j = j+1,然后在比较j < i else: print('素数有:%d' % i) 原文地址:https://www.cnblogs.com/laosun0204/p/8676383.html

Python3练习题 026:求100以内的素数

p = [i for i in range(2,100)] #建立2-99的列表 for i in range(3,100): #1和2都不用判断,从3开始     for j in range(2, i):         if i%j == 0:             p.remove(i)             break print(p) 原文地址:https://www.cnblogs.com/jackzz/p/9125546.html