题目描述:求解N以内的素数

法一:(筛选法)

筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。

#include <stdio.h>
int main()
{int arr[101]={0}; // 使数组下标和下标对应的值保持相同,数组不越界int n=0;while(scanf("%d",&n)!=EOF)  // 多组输入{int i=0;for(i=0;i<n;i++){arr[i]=i;}for(i=2;i<=n;i++){int j=0;for(j=i+1;j<=n;j++){if(arr[j]%i==0){arr[j]=0;}}}int count=0; // 统计0的个数for(i=2;i<=n;i++){if(arr[i]==0){count++;}else{printf("%d ",arr[i]);}}printf("\n%d\n",count);}return 0;
}

法二:(试除法)

基础版本:

#include <stdio.h>
int is_prime(int i)
{int j = 0;for (j = 2; j < i; j++){if (i%j == 0)return 0;}return 1;
}
int main()
{int n = 0;scanf("%d", &n);int i = 0;for (i = 2; i <= n; i++){if (is_prime(i))printf("%d ", i);}return 0;

优化版本1.0:(相关点在代码中以注释形式给出)

#include <stdio.h>
int is_prime(int i)
{int j = 0;for (j = 2; j < i; j++){if (i%j == 0)return 0;}return 1;
}
int main()
{int n = 0;scanf("%d", &n);int i = 0;for (i = 3; i <= n; i+=2)  // 可知,素数不可能是偶数,所以初始化全为奇数{if (is_prime(i))printf("%d ", i);}return 0;
}

优化版本2.0:

因为试除数 j  写成两数乘积形式的话(能被 j 除尽的数也一定能被j的乘数除尽),其中一个数绝不会大于 试除数的开平方 ,所以可以直接对试除数开平方,这样在比较时候就可以节省一半效率,优化啦代码 (eg.16=2*8=4*4 可见,两个乘数都没有哪个比开平方4还大 )。

#include <stdio.h>
#include <math.h>
int is_prime(int i)
{int j = 0;for (j = 2; j < sqrt(i); j++){if (i%j == 0)return 0;}return 1;
}
int main()
{int n = 0;scanf("%d", &n);int i = 0;for (i = 3; i <= n; i += 2){if (is_prime(i))printf("%d ", i);}return 0;
}

over~

本文长期更新,如果有了更优化的版本还会回过头继续更新 ~

C语言----求解N以内的素数的两种典型方法以及其优化相关推荐

  1. c语言 | 求100-200之间的素数(两种方法)

    首先要求100-200之间的素数,要知道素数是什么? 素数就是质数,只能被自身和1整除 下面会介绍两种方法: 常规方法: 代码: int main() {     int i = 0;     for ...

  2. 20以内的素数编码C语言,用C语言 输出100以内的素数,

    用C语言 输出100以内的素数, 用C语言 输出100以内的素数, 输出100以内的素数,谁能帮一下,我做了好久没做出来,也想了好久, 能带注释那更好了,我是新中新手,还有很多很多的不懂, 搜索更多相 ...

  3. C语言求解1000以内的完数

    C语言求解1000以内的完数 #include<stdio.h> int main(){int i,j;//求完数,如6是完数,6的因子有1,2,3,6=1+2+3 int sum;for ...

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

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

  5. c语言编写1000以内素数的函数6,C语言求1000以内的素数

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

  6. 素数探求c语言答案6,c语言素数的几种判断方法.doc

    c语言素数的几种判断方法 #include #include main() { int i,n; printf("请输入一个数:"); scanf("%d",& ...

  7. C语言判断素数的两种方法

    C语言判断素数的两种方法 素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. 思路1):因此判断一个整数m是否是素数, ...

  8. c语言中将十六进制数转换为十进制数程序,C语言中十六进制转十进制两种实现方法...

    C语言中十六进制转十进制两种实现方法 C语言 · 十六进制转十进制 问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英 ...

  9. 快速排序的两种实现方法(c语言版本)

    经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...

最新文章

  1. 用 Flask 来写个轻博客 (25) — 使用 Flask-Principal 实现角色权限功能
  2. 数据结构:循环链表解决约瑟夫问题
  3. struts实战--实现条件查询(利用dbutils)
  4. 大师兄科研网vasp_【回顾】第三临床学院2020年新生科研交流会
  5. 直接运行内存中的代码
  6. linux vim 高亮查找,vim技巧:用列表形式显示所有搜索到的内容,去掉搜索内容的高亮...
  7. matlab ,python,c++关于格式化输出数字的表达
  8. 对应生成树的基本回路_2011秋季学期离散数学语音答疑提纲下(全书考试内容)
  9. ng机器学习视频笔记(三) ——线性回归的多变量、特征缩放、标准方程法
  10. 服务器搭建微信编辑器,V5微信编辑器本地安装试卷.doc
  11. 【蓝牙】设备管理器找不到蓝牙
  12. MATLAB谐波均值滤波
  13. 手机远程桌面linux系统,vnc远程桌面手机版,vnc远程桌面手机版软件好用推荐
  14. 友华PT920/PT921/PT921G光猫破解超级密码
  15. 胡适致毕业生:功不唐捐
  16. IOS汉字转拼音首字母
  17. 多线程3——线程连接、分离和取消(linux)
  18. Unity景深效果解析
  19. 程序员和自由工作者如何去找兼职
  20. ios重签名shell脚本_03:双层签名和重签名流程以及shell脚本重签名

热门文章

  1. Serializer序列化使用
  2. 图神经网络方法总结(Graph Neural Network)
  3. 线性回归之案例:波士顿房价预测
  4. Module ‘celery‘ has no attribute ‘celery‘问题
  5. 汇编语言reg和sreg bp的介绍
  6. 计算机网络-物理层设备
  7. 创业基础(第8章 新企业的创办与管理) 来自高校:全国大学生创新创业实践联盟 分类:创新创业 学习规则:按序学习
  8. 静态NAT,动态NAT与NAPT区别
  9. 从源码学习Transformer!
  10. jQuery API之each、children、index的使用