C语言六种方法求素数(质数) 最全 输出2-100以内的所有素数 求1000以内的所有素数
方法一:挨个遍历 从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以内的所有素数相关推荐
- 代码实现:判断101-200之间有多少个素数(质数),并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。...
package com.heima.Coding;/*判断101-200之间有多少个素数(质数),并输出所有素数.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明 ...
- C语言 | 六种方法输出100以内的素数 | 代码演示
一.简单遍历 这是一个简单的C语言程序,实现的功能是打印出2到100之间的所有素数. 程序的基本思路是:用变量i从2开始逐个遍历到100,对于每一个i,用变量j从2开始逐个遍历到i-1,如果i能被j整 ...
- c语言输出2~100以内所有的素数
分析: 1.素数是只能被1和其本身整除的数.测试一个数n,是否为素数的基本思想是,对n用2~n-1之间的整数逐个去除,只要有一个整数能将n整除,那n就不是素数,立即跳出循环.于是呢,就可以用for循环 ...
- python基础练习题(按条件对指定序列求和,打印99乘法表、求斐波那契数列、百马百担、求水仙花数、求n以内的所有质数(素数)和)、集合的讲解、一些公关方法
1.求100(含100)以内所有偶数的和 range(start,end,step)这个序列生成器,和那个切片的语法一样,含头不含尾,step是步长,这里就不需要在对j进行判断了,对于这些简单求奇数和 ...
- c语言求定积分的程序,C语言用六种方法求定积分
<C语言用六种方法求定积分>由会员分享,可在线阅读,更多相关<C语言用六种方法求定积分(14页珍藏版)>请在人人文库网上搜索. 1.C语言 用六种方法求定积分C语言实验报告hW ...
- 用C语言编码定积分,C语言__用六种方法求定积分C语言__用六种方法求定积分.doc...
C语言__用六种方法求定积分C语言__用六种方法求定积分 描述问题 利用①左矩形公式,②中矩形公式,③右矩形公式 ,④梯形公式,⑤simpson公式,⑥Gauss积分公式求解定积分. 分析问题 2.1 ...
- c语言求1000以内素数个数的方法
求解的方法有很多,本文只介绍一种比较简单的方法. 算法:当输入的数字 n 不能被 2~(n - 1)整除时,n 为素数 反之,则 n 不为素数 源代码: #include< ...
- c语言判断一个数是不是质数的n次方,c语言实践 判断一个数是不是素数
int main() { int input = 0; scanf_s("%d",&input); if (input < 2) { printf("wro ...
- R代码验证1000以内的哥德巴赫猜想——①求素数②偶数分解为两质数之和
哥德巴赫猜想提出: 任一个大于2的偶数,都可以表示为两个素数之和. 根据哥德巴赫猜想,本文运用R进行验证. 判断一正数是否是素数: 求出100以内的所有素数: 对任何一个大于2 的偶数,求出一对素数, ...
- C语言求1000以内的素数
Today,让我来带大家学习怎样用C语言求1000以内的素数并输出 在这里,我用到的求素数的方法是用 i 除以 2 ~ i - 1 之间的每一个整数,如果都不能整除,那 i 就是素数,下面就不多说了, ...
最新文章
- 云终端处理器——Atom
- Java IO 字节流与字符流 (三)
- typescript tslint rules config
- .NET开发者的机遇与Web Blazor基础(有彩蛋)
- 纪中B组模拟赛总结(2020.2.3)
- mysql降级_mysql8降级到mysql5的方法介绍
- delphi trichviewedit 设置一行的段落_HTML中的文本与段落(3)
- 中移4G模块-ML302-OpenCpu开发-串口开发
- DirectAdmin安装mod_encoding支持中文
- (CVPR2019)图像语义分割(17)-DFANet:用于实时语义分割的深层特征聚合网络
- 操作系统设备驱动实验实验报告
- 重大福利!优云UEM重磅上线!
- 高级软件工程课程总结
- Java链表与数组间的相互转换
- python爬虫+selenium模拟点击+网页内容需要点击打开
- python自动添加微信好友_Python实现微信自动通过好友申请并发送加群链接!
- 用html语言制作表白动画,抖音很火的卡通做我女朋友表白html源码
- ICLR 2022 | 无需训练!As-ViT:自动扩展视觉Transformer
- 问题 F: 小白鼠排队
- 2022年乡村医生考试练习题及答案