package primenumber.s1; /** * Created by Lanxiaowei * Craated on 2016/12/10 21:53 * 求出[1,n]之间的所有素数 * 最原始的做法 */ public class TestPrimeNumber { //统计遍历的次数 private static int opsNum = 0; public static void main(String[] args) { //假设求1-100以内的所有素数 int n = 100; for(int i=2; i < n; i++) { boolean isPrime = isPrime(i); //如果是素数,则打印出来 if(isPrime) { System.out.println(i); } } System.out.println("Total loop times:" + opsNum); } /** * 判断是否为素数 * @param n 待判断的数字 * @return */ private static boolean isPrime(int n) { //若传入的数字n小于2,则直接return false,因为最小的素数为2 if(n < 2) { return false; } //从2遍历到n-1 for(int i = 2; i < n; ++i) { opsNum++; //如果发现能被其中任意一个数整除,那么说明数字n不是素数 if (n % i == 0) { return false; } } return true; } }
package primenumber.s2; /** * Created by Lanxiaowei * Craated on 2016/12/10 21:53 * 求出[1,n]之间的所有素数 */ public class TestPrimeNumber { //统计遍历的次数 private static int opsNum = 0; public static void main(String[] args) { //假设求1-100以内的所有素数 int n = 100; for(int i=2; i < n; i++) { boolean isPrime = isPrime(i); //如果是素数,则打印出来 if(isPrime) { System.out.println(i); } } System.out.println("Total loop times:" + opsNum); } /** * 判断是否为素数 * @param n 待判断的数字 * @return */ private static boolean isPrime(int n) { //若传入的数字n小于2,则直接return false,因为最小的素数为2 if(n < 2) { return false; } if(n == 2) { return true; } //如果传入的数字是偶数,那么一定不是素数 if(n%2==0) { return false; } //从3开始遍历剩下的所有奇数 for(int i = 3; i < n; i += 2) { opsNum++; if (n % i == 0) { return false; } } return true; } }
package primenumber.s3; /** * Created by Lanxiaowei * Craated on 2016/12/10 21:53 * 求出[1,n]之间的所有素数 * 定理: 如果n不是素数, 则n有满足1< d<=sqrt(n)的一个因子d. * 证明: 如果n不是素数, 则由定义n有一个因子d满足1< d< n. * 如果d > sqrt(n), 则 1/d <= √n ==> n/d <= √n * 则n/d是满足1 < n/d <= sqrt(n)的一个因子. */ public class TestPrimeNumber { //统计遍历的次数 private static int opsNum = 0; public static void main(String[] args) { //假设求1-100以内的所有素数 int n = 100; for(int i=2; i < n; i++) { boolean isPrime = isPrime(i); //如果是素数,则打印出来 if(isPrime) { System.out.println(i); } } System.out.println("Total loop times:" + opsNum); } /** * 判断是否为素数 * @param n 待判断的数字 * @return */ private static boolean isPrime(int n) { //若传入的数字n小于2,则直接return false,因为最小的素数为2 if(n < 2) { return false; } if(n == 2) { return true; } //如果传入的数字是偶数,那么一定不是素数 if(n%2==0) { return false; } //遍历从3到根号n之间的所有奇数 for(int i = 3; i*i <= n; i += 2) { opsNum++; if (n % i == 0) { return false; } } return true; } }
package primenumber.s4; /** * Created by Lanxiaowei * Craated on 2016/12/10 21:53 * 求出[1,n]之间的所有素数 * 定理: 若A = B * C且B <= C,B是能整除A的最小数字,那么B一定是素数 * 证明: 假设B不是素数,那么对于B一定存在这样的等式B=P*M,此时P肯定小于B, * B能整除A,那么P也一定能够整除A,那么说明B一定不是能整除A的最小数字, * 然而此时推理与题设提交相矛盾,由此证明"B不是素数"这个假设不成立即B一定是素数, * 从而定理得以证明. * 另外,根据题设中的条件: A = B * C且B <= C,我们可以得出: * B * B <= A ==> B <= √A */ public class TestPrimeNumber { public static void main(String[] args) { //假设求1-100以内的所有素数 int n = 100; boolean[] result = getPrimes(n); for(int i=2; i < n; i++) { boolean isPrime = result[i - 1]; //如果是素数,则打印出来 if(!isPrime) { System.out.println(i); } } } /** * 判断是否为素数 * @param n 待判断的数字 * @return */ private static boolean isPrime(int n) { boolean[] result = getPrimes(n); return !result[n-1]; } /** * 标记[1,n]之间的所有素数 * @param n * @return */ private static boolean[] getPrimes(int n) { //统计遍历的次数 int opsNum = 0; //使用一个数组标记[1,n]之间的每个数字是否为素数,false表示素数,true表示合数 boolean[] isPrimes = new boolean[n]; //这里的变量i即上面定理中的B,之所以是i * i < n,是由我们推断出的结论:B <= √A演化而来 for(int i=2; i * i <= n; i++) { //若为合数,则直接跳过 if(isPrimes[i - 1]) { continue; } // i * j <= n即B * C不能大于A,由A = B * C可知 for(int j = 2; i * j <= n; j++) { //此时i * j一定是合数 isPrimes[i * j - 1] = true; //统计遍历次数,主要是为了了解算法的性能 opsNum++; } } System.out.println("Total loop times:" + opsNum); return isPrimes; } }
package primenumber.s5; /** * Created by Lanxiaowei * Craated on 2016/12/10 21:53 * 求出[1,n]之间的所有素数[最高效的算法,算法复杂度O(n)] * 定理: 拿已知的素数列表去过滤合数,那么能够保证被过滤掉的合数有且只被过滤一次 */ public class TestPrimeNumber { public static void main(String[] args) { //假设求1-100以内的所有素数 int n = 100; boolean[] result = getPrimes(n); for(int i=2; i < n; i++) { boolean isPrime = result[i - 1]; //如果是素数,则打印出来 if(!isPrime) { System.out.println(i); } } } /** * 判断是否为素数 * @param n 待判断的数字 * @return */ private static boolean isPrime(int n) { boolean[] result = getPrimes(n); return !result[n-1]; } /** * 标记[1,n]之间的所有素数 * @param n * @return */ private static boolean[] getPrimes(int n) { //统计遍历的次数 int opsNum = 0; //使用一个数组标记[1,n]之间的每个数字是否为素数,false表示素数,true表示合数 boolean[] isPrimes = new boolean[n]; //目前已知的素数 int[] primeList = new int[n]; //目前已知素数列表索引 int p = 0; for(int i=2; 2 * i <= n; i++) { //若为素数,则记录到目前已知的素数数组中 if(!isPrimes[i - 1]) { primeList[p++] = i; } //遍历目前已知的素数来过滤合数 for(int j = 0; j < p; j++) { if(i * primeList[j] <= n) { // i * primeList[j]一定是合数,因为已知primeList[j]是素数,而i > 1,因此得以证明i * primeList[j]一定是合数. isPrimes[i * primeList[j] - 1] = true; //统计遍历次数,主要是为了了解算法的性能 opsNum++; } // 如果i不是一个素数 if(i % primeList[j] == 0) { break; } } } System.out.println("Total loop times:" + opsNum); return isPrimes; } }
相关推荐
编程求解1到n之间所有素数之和,输入只有一个n,输出为一个数。
在这个特定的示例中,“LabView 计算整数N内所有的素数”指的是利用LabView来编写一个程序,该程序能够找出从1到一个指定整数N之间所有素数。 素数是大于1且除了1和它自身以外没有其他正因数的自然数。判断一个数...
素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。 问题: 输入一个整数n,输出1~n中的素数,里有详细解释,有问题也欢迎留言!谢谢支持啦~
输出1到n之间的素数,c语言程序,练习用。
何为质数: 只能被1 和 自身 整除的数; 方法: 利用js中求模, 看是否有余数. —> 3%2 = 1; 5%2 = 3……… 代码如下: ...那如何判断1到任意数之间的所有质数呢, 就比较简单; 代码如下: function primeNumbe
在本项目中,我们主要探讨的是如何利用C++编程语言,结合Microsoft Foundation Classes (MFC)库来实现一个功能,即查找指定范围内(m到n)的前k个素数并将其输出。C++是一种静态类型、编译式、通用的、大小写敏感的...
该方法的思想是,一轮循环判断从2到N之间的所有数字,判断每个数字是不是都只能被1和自身整除。如果某个数字满足该条件,则该数字为素数。 该方法的实现代码如下: ```c #include #define N 10000 int main(){ ...
编写C++程序完成以下功能: (1) 提示用户输入N; (2) 计算出从2到N之间的所有素数; (3) 将结果保存在一个文本文件中。
【描述】求m-n以内所有素数之和并输出。...
输入一个数n,判断2~n之间的素数,并输出。
本项目旨在教授如何利用C++语言编写程序,输出1到100之间的所有素数。首先,我们需要理解素数的基本定义和检查方法。 在C++中,我们通常通过一个循环结构遍历1到100的整数,然后对每个数进行素数判断。素数检查通常...
输入一个自然数n,求1~n之间的所有自然数之和。
`求1~5000之间的所有素数设计报告书.doc`很可能包含程序的设计思路、算法解释、实现细节以及可能的性能分析。这份报告是学习过程的重要组成部分,可以帮助我们理解作者如何解决这个问题。 最后,`使用说明文档.txt`...
上述Java程序通过一系列的基础编程概念和技术实现了输出两个整数之间的所有素数的功能。它利用了用户输入、循环结构、条件判断以及方法定义等重要的编程技术。这种类型的练习有助于加深对Java语言的理解和掌握,并且...
在这个程序中,我们需要找出从m到n之间的所有质数。具体算法如下: 1. 首先遍历从m到n的所有整数。 2. 对于每个整数i,检查它是否能被2到i-1之间的任何数整除。 3. 如果找到了可以整除i的数,则i不是质数;如果没有...
### C语言求100到200之间的素数 #### 知识点解析 **题目背景:** 在计算机科学领域,素数检测是常见的算法问题之一。本篇代码示例通过C语言实现了一个简单的程序,该程序能够找出100至200之间的所有素数。对于...
在这个案例中,我们将深入探讨如何用C++编程语言找出100到200之间的所有素数。 首先,我们需要理解素数的基本判断方法,即“试除法”。对于给定的正整数n,我们从2开始逐个检查到其平方根,如果n能被其中任意一个数...
1. 编写程序求出10万以内的所有素数,并将这些素数输出到 一个文本文件中,每行文本只包含一个素数数据。 2. 编写程序求出10万以内的所有素数,然后再判断这些素数中 哪些是由素数拼接而成的。例如素数23就符合...
2. **生成候选素数列表**:使用`prime`函数生成从2到`d`之间的所有素数列表。 3. **查找符合条件的数对**: - 对于每一个候选素数`i`(从列表中选择): - 计算`d - i`的值,记为`j`。 - 如果`j`也是素数,则将`...
在Java编程中,我们可以通过编写程序来找出指定范围内所有的素数。题目要求找出101到200之间的素数,并计算它们的数量。下面我们将详细解释这个程序的工作原理以及涉及的关键知识点。 首先,我们看到程序使用了`for...