质数:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。

  题设:输入一个大于1的自然数,求出从2到该数之间所有的质数。

  1.  按照素数的定义来求取,用两个for循环。

  1. #include <stdio.h>
  2. int prime(int i){
  3. int j;
  4. for(j=;j<i;j++){
  5. if(i%j==){
  6. return ;
  7. }
  8. }
  9. return ;
  10.  
  11. }
  12.  
  13. int main(void){
  14. int n,i;
  15. printf("请输入一个整数: ");
  16. scanf("%d",&n);
  17. for(i = ; i <= n; i++){
  18. if(prime(i)){
  19. printf("%d ",i);
  20. }
  21. }
  22. printf("\n");
  23.  
  24. }

  2.  对 1 进行优化,先排除可以被2整除的数(一定不是质数),sqrt()减少循环的区间。

  1. #include <stdio.h>
  2. #include <math.h>
  3. int prime(int i){
  4. int j,temp;
  5. temp=sqrt(i)+;//sqrt()
  6. for(j=;j<temp;j++){
  7. if(i%j==){
  8. return ;
  9. }
  10. }
  11. return ;
  12. }
  13. int main(void){
  14. int n,i;
  15. printf("请输入一个整数: ");
  16. scanf("%d",&n);
  17. for(i = ; i <= n; i++){
  18. if(i % != ){ //除去2的倍数。
  19. if (prime(i)) {
  20. printf("%d ",i);
  21. }
  22. }
  23.  
  24. }
  25. printf("\n");
  26.  
  27. }

  3.  筛选法

  1. #include "stdio.h"
  2. #include "math.h"
  3. int main(void){
  4. int i,j,n,t,a[];
  5. t = ;
  6. for(i = ; i < ; i++){
  7. a[i] = ;
  8. }
  9.  
  10. printf("请输入一个大于1的整数: ");
  11. scanf("%d",&n);
  12.  
  13. for(i = ; i <= n; i++){
  14. if(a[i] == ){
  15. for(j = i*; j <= n; j = j+i){
  16. a[j] = ;
  17. }
  18. printf("%d ",i);
  19. t++;
  20. }
  21. }
  22. printf("\n");
  23. printf("%d",t);
  24.  
  25. }

   3-1  筛选法优化

  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. int main(){
  5. int arr[], i, j, n;
  6. arr[] = ;
  7. for(i=; i<; i++){
  8. if(i % ==){
  9. arr[i] = ;
  10. }else{
  11. arr[i] = ;
  12. }
  13. }
  14.  
  15. printf("请输入一个整数: ");
  16. scanf( "%d", &n);
  17.  
  18. for(i=; i<=n; i++){
  19. if (arr[i] == ){
  20. for(j=i*i; j<=n; j=j+i*){
  21. arr[j] = ;
  22. }
  23.  
  24. printf("%d ",i);
  25. }
  26.  
  27. }
  28.  
  29. }

C_求质数的更多相关文章

  1. 求质数算法的N种境界[1] - 试除法和初级筛法

    ★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?>一文,以"求质数"作为例子,介绍了一些考察应聘者的经验.由于本文没有政治敏感内容,顺便就转贴到俺在CSD ...

  2. [经典算法] Eratosthenes筛选求质数

    题目说明: 除了自身之外,无法被其它整数整除的数称之为质数,要求质数很简单,但如何快速的求出质数则一直是程式设计人员与数学家努力的课题,在这边介绍一个著名的 Eratosthenes求质数方法. 题目 ...

  3. C语言1-100连加,求质数,算瑞年检测字母大小写,登录系统

    #include <stdio.h> void test(){//1+2+3+4+.....+100 int a,b; a=0; b=0; for ( ; a<=100; a++) ...

  4. 【转】求质数算法的N种境界

    原文地址:http://blog.csdn.net/program_think/article/details/7032600/ ★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?& ...

  5. (转)求质数算法的N种境界[1] - 试除法和初级筛法

    ★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?>一文,以"求质数"作为例子,介绍了一些考察应聘者的经验.由于本文没有政治敏感内容,顺便就转贴到俺在CSD ...

  6. C语言程序设计100例之(11):求质数

    例11  求质数 问题描述 质数是指除了有1和自身作为约数外,不再有其他约数的数.比如:3.5.7是质数.而9不是质数,因为它还有约数3. 编写程序求给定区间中的所有质数. 输入格式 两个整数a和b, ...

  7. C语言程序设计100例之(12):Eratosthenes筛法求质数

    例12   Eratosthenes筛法求质数 问题描述 Eratosthenes筛法的基本思想是:把某范围内的自然数从小到大依次排列好.宣布1不是质数,把它去掉:然后从余下的数中取出最小的数,宣布它 ...

  8. 小白的C++之路——求质数

    初学C++,打算用博客记录学习的足迹.写了两个求质数的程序,修修改改. #include <iostream> #include <math.h> using namespac ...

  9. Java实现欧拉筛与花里胡哨求质数高级大法的对比

    我也不清楚这是什么高级算法,欧拉筛是昨天有位大佬,半夜无意间告诉我的 欧拉筛: 主要的含义就是我把这个数的所有倍数都弄出来,然后下次循环的时候直接就可以跳过了 import java.text.Sim ...

随机推荐

  1. 使用jquery.more.js上滑加载更多

    html: <div id="more"> <div class="single_item"> <div class=" ...

  2. springboot1.5.4 集成cxf完整实例

    WebService 服务端 添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xml ...

  3. Java第三阶段学习(七、线程池、多线程)

    一.线程池 1.概念: 线程池,其实就是一个容纳多个线程的容器,其中的线程可以重复使用,省去了频繁创建线程对象的过程,无需反复创建线程而消耗过多资源,是JDK1.5以后出现的. 2.使用线程池的方式- ...

  4. Nginx Java 日志切割脚本

    Nginx日志切割脚本: #!/bin/bash ########################################################################### ...

  5. 【C#】WebApi 添加过滤器,实现对请求参数和响应内容的日志记录

    filter的介绍 filter在Web API中经常会用到,主要用于记录日志,安全验证,全局错误处理等:Web API提供两种过滤器的基本类型:actionfilterattribute,excep ...

  6. 【Arduino】开源开发板说明

    来自世界各地的新型微控制器层出不穷,这类开发板多数都是通过Arduino改进的版本,例如由Arduino所改良的Yún一样,主要是针对网状网路进行改进或升级了其它无线功能. 但一些开发板也有着其独到的 ...

  7. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-6项目缓冲方案

    Asp.Net Core2.0下使用memcached缓存. Memcached目前微软暂未支持,暂只支持Redis,由于项目历史原因,先用博客园开源项目EnyimMemcachedCore,后续用到 ...

  8. linq 将datatable分组求和在转datatable

    DataTable dt = new DataTable(); dt.Columns.Add("CustomerID"); dt.Columns.Add("aa" ...

  9. L3-002 特殊堆栈 (30 分) 模拟stl

    堆栈是一种经典的后进先出的线性结构,相关的操作主要有“入栈”(在堆栈顶插入一个元素)和“出栈”(将栈顶元素返回并从堆栈中删除).本题要求你实现另一个附加的操作:“取中值”——即返回所有堆栈中元素键值的 ...

  10. Codeforces 920F - SUM and REPLACE 【线段树】

    <题目链接> 题目大意: 给你一个序列,有两个操作,一个是求区间 l - r 的和,另一个是对区间l-r的元素修改值,x=d(x),d(x)为x的因子个数. 解题分析: 因为可能有多次修改 ...