我的算法思想和实现方式都在代码和注释当中呢,这样的方式确实使算法复杂度降低一个等级,很好啊。

#include <stdio.h>
#include <time.h>/*** 利用数组求前n个质数* 确定一个数m是否为质数,可以用已求出的质数对m* 的整除性来确定*///如果不知道质数的特性和想不到优化思路的方法
void getNPrimes_normal();//优化之后的方法
void getNPrimes_optimize();int main(void)
{clock_t start,end;start = clock(); //开始时,取得开始时间。//通常的做法的运行时间,输入的n=10000//getNPrimes_normal();//优化后的运行时间getNPrimes_optimize();end = clock();   //结束时,取得结束时间printf("Run time: %lf S",(double)(end-start)/CLOCKS_PER_SEC);return 0;
}//通常用到的想法
void getNPrimes_normal(){/*** 用于保存质数的数量* @brief count*/int count;printf("Please the count of prime number:\n");scanf("%d",&count);//使用数组来保存所求出的质数int primes[count];/*** 首先,第一个已知的质数是2,* 则计算应该从3开始*/primes[0] = 2;int pc = 1;int m = 3; //从数字3开始while(pc < count){int k = 0;// 这里只要找不到质数,就会一直在这个循环中while(k < pc){if(m % primes[k] == 0){m += 1;k = 0;}else{k++;}}//找到质数之后,跳出上面的循环//这个的执行是先执行primes[pc] = m;//再去执行pc++;primes[pc++] = m;m+=1;}/*** 对质数进行输出操作**/for(pc = 0;pc < count;pc++){printf("%4d\t",primes[pc]);}}//优化之后的方法
void getNPrimes_optimize(){/*** 用于保存质数的数量* @brief count*/int count;printf("Please the count of prime number:\n");scanf("%d",&count);//使用数组来保存所求出的质数int primes[count];/*** 首先,第一个已知的质数是2,* 则计算应该从3开始*/primes[0] = 2;int pc = 1;int m =3; //从数字3开始while(pc < count){/*** 首先需要解决的是如何判断一个数是一个质数* 1:除了数字2之外,其他所有的质数都是奇数* 2:假设某一个数字是k,只要判断k能否被k之前*    的质数整除就可以了,如果能够整除,则k就是*    合数,如果不能整除,k就是质数**    但是,为了减少算法的复杂度,我们这样设想*    p*q=k*    则肯定p和q中:*    p*p <=k的话,q*q >= k*    则,只要求k能否被k的平方根之前的数字整除就可以了。**    基于这个思想,我们的实现方式如下:*/int k = 0;// 这里只要找不到质数,就会一直在这个循环中while(primes[k] * primes[k] <= m){if(m % primes[k] == 0){m += 2; //除了数字2之外,其他所有的质数都是奇数k = 1; //不用使用数字2去测试}else{k++;}}//找到质数之后,跳出上面的循环//这个的执行是先执行primes[pc] = m;//再去执行pc++;primes[pc++] = m;m+=2;}/*** 对质数进行输出操作**/for(pc = 0;pc < count;pc++){printf("%4d\t",primes[pc]);}
}

下面是我的运行结果,第一个是没有优化的结果,第二个是经过算法优化后的结果,效果还是很明显的。

这个是没有优化的结果:

这个是优化之后的结果:

转载于:https://www.cnblogs.com/bobo1223/p/7287624.html

利用数组求前n个质数相关推荐

  1. c语言输出斐波那契数列前20项,在c语言中,如何利用数组求斐波那契数列的前20项?...

    在c语言中,以vc为例利用数组求斐波那契数列的前20项的具体步骤如下: 1.首先,打开vc: 2.点击文件.新建: 3.选择win32 console application 并在右侧输入工程的名字和 ...

  2. 数组求前n项和 和 求中间n项和 学习记录

    树状数组求前n项和 和 求中间n项和 学习记录 树状数组主要是靠lowbit函数,具体的是原码反码补码巧夺天工的想法,想要了解的可以百度一下. lowbit = ()=>{return x&am ...

  3. c语言斐波那契数列前20项和,,c语言利用数组求斐波那契数列的前20项

    推荐回答 一.斐波那契数列指的是这样一个数列1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711 ...

  4. java利用数组求平均值_Java程序使用数组计算平均值

    Java程序使用数组计算平均值 在此程序中,您将学习计算Java中给定数组的平均值. 示例:使用数组计算平均值的程序 public class Average { public static void ...

  5. JAVA利用数组求两点距离_利用java、js或mysql计算高德地图中两坐标之间的距离

    利用java.js或mysql计算高德地图中两坐标之间的距离 2019-09-19 编程之家收集整理的这篇文章主要介绍了利用java.js或mysql计算高德地图中两坐标之间的距离,编程之家小编觉得挺 ...

  6. 用java语言求前50个素数_Java求质数的几种常用算法总结

    Java求质数的几种常用算法分析 本文实例讲述了Java求质数的几种常用算法.分享给大家供大家参考,具体如下: 1.根据质数的定义求 质数定义:只能被1或者自身整除的自然数(不包括1),称为质数. 利 ...

  7. Java - 用数组求出斐波那契数列的前20项值

    斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为" ...

  8. 利用函数求数组中的最大值

    利用函数求数组中的最大值 <!DOCTYPE html> <html lang="en"><head><meta charset=&quo ...

  9. 歌咏比赛,有10个评委,有5个选手,求出每一个选手的平均得分(去掉一个最高分和一个最低分)。 要求:利用数组、有参有返回的函数

    歌咏比赛,有10个评委,有5个选手,求出每一个选手的平均得分(去掉一个最高分和一个最低分). 要求:利用数组.有参有返回的函数 judge = []player = []avg = 0sum = 0m ...

最新文章

  1. 天的各种书法_寒假书法集训|小考拉硬笔书法班招募中
  2. JVM 调优 —— GC 长时间停顿问题及解决方法
  3. Python连接Oracle数据库,以字典形式返回结果
  4. 通俗讲解和学习SQL
  5. 全志 增加启动默launcher函数 Patch
  6. module是什么类型_Linux驱动开发:为什么教程都不讲MODULE_DEVICE_TABLE的作用
  7. Notepad++技巧
  8. 深入解读 MySQL 架构设计原理,剖析存储架构选型核心
  9. 一文看尽 JVM GC 调优
  10. C语言中指针和数组的区别
  11. poj 1062 昂贵的聘礼 最短路
  12. FZU 1054 阅读顺序
  13. C#程序员整理的Unity 3D笔记(十三):Unity 3D基于组件的思想
  14. m6A去甲基化酶激活/抑制检测试剂盒实验原理
  15. 好玩好用的网站,不能错过!
  16. 【xlsx-chart】Vue项目中导出Excel表格并带上图表
  17. 国风就是帅,会三板吗,看看新天吧
  18. iOS定位原理和使用建议
  19. (五)通过pygame搭建游戏框架
  20. 人工智能基础(高中版)教材补充和资源分享

热门文章

  1. 开课吧课堂:数据可视化的制作方法与准则有哪些?
  2. 整理的C++面试题,大厂面试总遇到!
  3. 淘宝Web服务器Tengine正式开源
  4. Mac 上管理多个 java 版本
  5. how bootstrap fit into our website design?
  6. 射手网字幕打包下载(73.16G)
  7. 【重点!DP】LeetCode 97. Interleaving String
  8. Leetcode 34.排序数组中的第一个元素和最后一个元素
  9. 【EOS】2.2 发行Token,转移Token
  10. python读取XML中bndbox和object name的方法