方法一:挨个遍历 从1-1000都试一次 -----通俗易懂的方法

#include<stdio.h>
#include<time.h>
bool IsPrime(int n)
{int i;if (n <= 1) {return false;}if (n == 2) {return true;}for (i = 2; i < n; i++) {if (n % i == 0) return false;}return true;
}
int main() {int n, i;int t1 = clock();for (i = 0; i <= 1000; i++) {if (IsPrime(i)) printf(" %d ", i);}int t2 = clock();printf("\n运行时间:%d\n", t2 - t1);return 0;
}

代码运行结果如下:

方法二:使用奇数的思想

核心思想:除了2以外那些2的倍数(4、6、8、10、12、14、18·······)都不是质数

代码示例如下:

#include <stdio.h>
int main()
{int x = 0;int i = 0;unsigned int count = 0;x = 2;printf("%d ", x);   for (x = 3; x < 1000; x += 2)  {for (i = 2; i < x; i++){count++;if (x % i == 0){break;}}if (x == i){printf("%d ", x);}}printf("\n\n\n");printf("运算的次数:%d ", count);return 0;
}

运行结果如下:

方法三:同时使用奇数和偶数来实现

核心思想:所以除了2以外质数一定是奇数

代码示例如下:

#include <stdio.h>
int main()
{int x = 0;int i = 0;unsigned int count = 0;x = 2;printf("%d ", x);for (x = 3; x < 1000; x += 2)  //两层for循环均只产生奇数{for (i = 3; i < x; i += 2)  //控制第二层for循环不再自增1,而是从3开始自增2{count++;if (x % i == 0){break;}}if (x == i){printf("%d ", x);}}printf("\n\n\n");printf("运算的次数:%d ", count);return 0;
}

代码运行结果如下:

方法四:平方根sqrt方法实现

代码示例如下:

#include<stdio.h>
#include<time.h>
#include<math.h>
int IsPrime(int n)
{int i;if (n % 2 == 0) return 0;for (i = 3; i <= sqrt(n); i += 2) {if (n % i == 0) return 0;}return 1;
}
int main() {int n, i;int t1 = clock();printf(" 2 ");for (i = 3; i <= 1000; i++) {if (IsPrime(i)) printf(" %d ", i);}int t2 = clock();printf("\n运行时间:%d\n", t2 - t1);
}

代码运行结果如下:

方法五:使用数组的方法实现

代码示例如下:

#include <stdio.h>
int main()
{int arr[500] = { 0 };int x = 0;int i = 0;unsigned int count = 0;int sum = 0;  //定义数组的下标arr[sum] = 2;  //把2存到数组中sum++;arr[sum] = 3;   //把3存到数组中sum++;for (x = 5; x < 1000; x += 2){for (i = 0; i < sum; i++)//从下标0开始遍历,直到数组的最后一个质数{count++;if (x % arr[i] == 0){break;}}if (sum == i)  //遍历后都不能整除{arr[sum] = x;  //把质数保存到数组中sum++;   //下标加1,为下次放做准备}}for (i = 0; i < sum; i++)//使用for循环进行输出{printf("%d ", arr[i]);}printf("\n\n\n");printf("运算的次数:%d ", count);return 0;
}

代码运行结果如下:

方法六:筛选法(空间换时间)

思路:把2到n中的所有数都列出来,然后从2开始,先筛去n内所有2的倍数,然后每次从下一个剩下的数(必然为质数)开始,筛去其n内所有的倍数,最后剩下的数都是质数

代码示例如下:


//1.设置一个数组a[],a[i]的值为1表示i为质数,将所有元素初始化为1//2.筛去m的倍数,即把a[2*m]、a[3*m]…置为0//3.输出a[i]值为1的i。
#include<stdio.h>
#define MAX 1000
int s;
int a[MAX];
void prime()
{s = 1;for (int i = 0; i <= MAX; i++)a[i] = 1;a[0] = a[1] = 0;for (int i = 2; i <= MAX; i++){if (a[i])a[s++] = i;for (int j = i * 2; j <= MAX; j += i)a[j] = 0;}
}
int main()
{prime();for (int i = 1; i < s; i++)printf("%d ", a[i]);return 0;
}

代码运行结果如下:

编者注:以上对本小题的代码编写的多种方法,欢迎大家收藏借鉴并转发;

以上代码仅供参考,如有问题欢迎大家在留言区批评指正;

版权所有,翻印必究,如有雷同纯属巧合,转载请注明出处。

By CRH380AJ2808 2022.04.27

————————————————
版权声明:本文为CSDN博主「CRH380AJ2808」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/JH13thpig/article/details/124440215

C语言六种方法求素数(质数) 最全 输出2-100以内的所有素数 求1000以内的所有素数相关推荐

  1. 代码实现:判断101-200之间有多少个素数(质数),并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。...

    package com.heima.Coding;/*判断101-200之间有多少个素数(质数),并输出所有素数.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明 ...

  2. C语言 | 六种方法输出100以内的素数 | 代码演示

    一.简单遍历 这是一个简单的C语言程序,实现的功能是打印出2到100之间的所有素数. 程序的基本思路是:用变量i从2开始逐个遍历到100,对于每一个i,用变量j从2开始逐个遍历到i-1,如果i能被j整 ...

  3. c语言输出2~100以内所有的素数

    分析: 1.素数是只能被1和其本身整除的数.测试一个数n,是否为素数的基本思想是,对n用2~n-1之间的整数逐个去除,只要有一个整数能将n整除,那n就不是素数,立即跳出循环.于是呢,就可以用for循环 ...

  4. python基础练习题(按条件对指定序列求和,打印99乘法表、求斐波那契数列、百马百担、求水仙花数、求n以内的所有质数(素数)和)、集合的讲解、一些公关方法

    1.求100(含100)以内所有偶数的和 range(start,end,step)这个序列生成器,和那个切片的语法一样,含头不含尾,step是步长,这里就不需要在对j进行判断了,对于这些简单求奇数和 ...

  5. c语言求定积分的程序,C语言用六种方法求定积分

    <C语言用六种方法求定积分>由会员分享,可在线阅读,更多相关<C语言用六种方法求定积分(14页珍藏版)>请在人人文库网上搜索. 1.C语言 用六种方法求定积分C语言实验报告hW ...

  6. 用C语言编码定积分,C语言__用六种方法求定积分C语言__用六种方法求定积分.doc...

    C语言__用六种方法求定积分C语言__用六种方法求定积分 描述问题 利用①左矩形公式,②中矩形公式,③右矩形公式 ,④梯形公式,⑤simpson公式,⑥Gauss积分公式求解定积分. 分析问题 2.1 ...

  7. c语言求1000以内素数个数的方法

    求解的方法有很多,本文只介绍一种比较简单的方法. 算法:当输入的数字 n 不能被 2~(n - 1)整除时,n 为素数            反之,则 n 不为素数  源代码: #include< ...

  8. c语言判断一个数是不是质数的n次方,c语言实践 判断一个数是不是素数

    int main() { int input = 0; scanf_s("%d",&input); if (input < 2) { printf("wro ...

  9. R代码验证1000以内的哥德巴赫猜想——①求素数②偶数分解为两质数之和

    哥德巴赫猜想提出: 任一个大于2的偶数,都可以表示为两个素数之和. 根据哥德巴赫猜想,本文运用R进行验证. 判断一正数是否是素数: 求出100以内的所有素数: 对任何一个大于2 的偶数,求出一对素数, ...

  10. C语言求1000以内的素数

    Today,让我来带大家学习怎样用C语言求1000以内的素数并输出 在这里,我用到的求素数的方法是用 i 除以 2 ~ i - 1 之间的每一个整数,如果都不能整除,那 i 就是素数,下面就不多说了, ...

最新文章

  1. 云终端处理器——Atom
  2. Java IO 字节流与字符流 (三)
  3. typescript tslint rules config
  4. .NET开发者的机遇与Web Blazor基础(有彩蛋)
  5. 纪中B组模拟赛总结(2020.2.3)
  6. mysql降级_mysql8降级到mysql5的方法介绍
  7. delphi trichviewedit 设置一行的段落_HTML中的文本与段落(3)
  8. 中移4G模块-ML302-OpenCpu开发-串口开发
  9. DirectAdmin安装mod_encoding支持中文
  10. (CVPR2019)图像语义分割(17)-DFANet:用于实时语义分割的深层特征聚合网络
  11. 操作系统设备驱动实验实验报告
  12. 重大福利!优云UEM重磅上线!
  13. 高级软件工程课程总结
  14. Java链表与数组间的相互转换
  15. python爬虫+selenium模拟点击+网页内容需要点击打开
  16. python自动添加微信好友_Python实现微信自动通过好友申请并发送加群链接!
  17. 用html语言制作表白动画,抖音很火的卡通做我女朋友表白html源码
  18. ICLR 2022 | 无需训练!As-ViT:自动扩展视觉Transformer
  19. 问题 F: 小白鼠排队
  20. 2022年乡村医生考试练习题及答案

热门文章

  1. Unity3d 局域网小游戏DEMO学习
  2. 2020抖音无人直播技术:最新不封号无人直播的操作方法详细介绍
  3. StretchDIBits函数
  4. vue 读取shapefile文件转成GeoJson
  5. Unity物理引擎基础优化准则
  6. Matter.js 2D 物理引擎试玩报告
  7. Kali Linux-SET社会工程学攻击
  8. 太阳高度角计算题_正午太阳高度角的计算及应用
  9. linux下codeblock使用注意事项 (deepin)
  10. R语言t检验中手动计算t值和p值