Trial division

试除法求最小N个素数是一个经典的算法。

这个算法不同于前一个版本《试除法求最小N个素数》的方法,也是一个比较快速的方法。

这个算法考虑以下两点:

1.偶数中只有2是素数,其他素数是奇数;

2.试除法中,对于数n,只需要对使用小于sqrt(n)的素数试除即可,n只需要用3,5,7,...,进行试探。并且只需要用已知的素数作为除数即可。

程序中,利用已经知道的素数去试除,处理速度上自然就快。开始时,将2和3放入已经求得的素数数组中是必要的。函数isprime()只需要考虑对奇数进行判定即可,所以用从3开始的奇素数试除。

程序如下:

/* 试除法计算最小的N个素数 */#include <stdio.h>
#include <math.h>#define N 132#define TRUE 1
#define FALSE 0typedef unsigned long long ULL;ULL prime[N+1] = {2, 3};int isprime(ULL prime[], int n)
{ULL end = (ULL)sqrt(n);int i;for(i=1; prime[i]<=end; i++)if(n % prime[i] == 0)return FALSE;return TRUE;
}void genprime(ULL prime[], int n)
{int k = 2;for(int i=5; k<n; i+=2)if(isprime(prime, i))prime[k++] = i;
}int main(void)
{genprime(prime, N);for(int i=0; i<N; i++)printf("%lld\n", prime[i]);return 0;
}

计算结果如下:

2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
101
103
107
109
113
127
131
137
139
149
151
157
163
167
173
179
181
191
193
197
199
211
223
227
229
233
239
241
251
257
263
269
271
277
281
283
293
307
311
313
317
331
337
347
349
353
359
367
373
379
383
389
397
401
409
419
421
431
433
439
443
449
457
461
463
467
479
487
491
499
503
509
521
523
541
547
557
563
569
571
577
587
593
599
601
607
613
617
619
631
641
643
647
653
659
661
673
677
683
691
701
709
719
727
733
739
743

试除法求最小N个素数之二相关推荐

  1. 试除法计算最小的N个素数

    Trial division 试除法求最小N个素数是一个经典的算法. 可以使用素数分类的性质来加快计算的速度. 除了2以外,素数只能是2n+1,n>=1. 除了2.3和5以外,素数只能是6n+1 ...

  2. 算法刷题-数论-试除法求约数、约数个数、约数之和、最大公约数(辗转相除法)

    文章目录 acwing869. 试除法求约数 acwing870. 约数个数 acwing871. 约数之和 acwing872. 最大公约数 acwing869. 试除法求约数 acwing869. ...

  3. 数学知识 试除法求约数

    试除法求约数 给定 n 个正整数 ai,对于每个整数 ai,请你按照从小到大的顺序输出它的所有约数. 输入格式 第一行包含整数 n. 接下来 n 行,每行包含一个整数 ai. 输出格式 输出共 n 行 ...

  4. 数论 - 约数基础 【 试除法求所有约数 + 约数个数和约数之和 + 欧几里得算法-求解最大公约数 】

    数论-约数基础 1.约数定义 约数,又称因数.整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a.a称为b的倍数,b称为a的约数.在大学之前,"约数 ...

  5. ~~试除法求所有约数(附模板题)

    模板 vector<int> get_divisors(int x) {vector<int> res;for (int i = 1; i <= x / i; i ++ ...

  6. AcWing 869. 试除法求约数(枚举)

    题目连接 https://www.acwing.com/problem/content/871/ 思路 就是我们从1枚举到(n)\sqrt(n)(​n)如果能整除我们就放进map容器中最后遍历容器就好 ...

  7. 【基础算法】试除法求约数(Acwing869题)

    题目 给定n个正整数,对于每个整数,请你按照从小到大的顺序输出它的所有约数. 输入格式 第一行包含整数n.接下来n行,每行包含一个整数. 输出格式 输出共n行,其中第 i 行输出第 i 个整数的所有约 ...

  8. 【如何求素数】试除法讲解

    试除法 1.素数的定义 2.for套嵌使用求解素数 3.试除法的算法优化 1.素数的定义 素数又称为质数,指的是在大于1的整数中 只能被1和这个数本身整除的数. 在了解了素数的定义之后,我们如何用C语 ...

  9. python素数问题_试除法解决质数问题(Python3)

    浅析求解质数问题的一些方法 质数问题是算法中常见的和入门的问题,今天姑且用 "打印100以内所有质数" 这个问题,浅析一下求质数问题中的一些基础优化. 质数的定义 质数(prime ...

最新文章

  1. python代码大全p-基于python实现计算两组数据P值
  2. linux下提示/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14‘ not found 解决办法
  3. Android学习--持久化(三) SQLite LitePal
  4. 使用KubeKey 离线环境部署 KubeSphere v3.0.0
  5. Java虚拟机学习总结(2)——性能优化的一般性原则、层次与通用方法
  6. pytest测试框架(五)---使用xfail将用例标记为失败
  7. tensorflow动态设置trainable
  8. SimpleDateFormat 线程不安全原因及解决办法
  9. AutoCAD2012从入门到精通中文视频教程 第13课 正多边形(个人收藏)
  10. PHP判断浏览器类型及版本
  11. c语言 多核优化,【模型工具】一种对SWMM5的多核优化
  12. 汽车级485通信电路
  13. 量子计算机原理 纠缠,白话量子计算机原理【前面的那个有错误,重新理清了一下思路】...
  14. 关于射频技术在粮食安全的科研进展
  15. 将图像上雨水去除的四种主流方法
  16. Java中undefined是什么意思,Haskell中的undefined和Java中的null有什么区别?
  17. FireFox-background
  18. 089day(JAVA变量输入输出,类型转换,运算符的练习和概念的内涵和外延)
  19. [xiaoyi和你飞]博弈基础 ——[AB]
  20. 人人可以是好厨子:72招做饭技巧帮你变大厨

热门文章

  1. Services in Kubernetes
  2. C#在控制台工程中嵌入winform窗体
  3. 游戏接腾讯平台的一些锁事
  4. java集合输入存储_Java练习IO流使用Properties集合存储数据并...
  5. ppt中如何合并流程图_PPT中图片如何排版才能好看
  6. linux中.开头的变量,linux中的变量
  7. python可以参加哪些竞赛_找出Python竞赛中可达到的分数的程序
  8. 设计模式(四)行为型模式
  9. Linux中JDK安装配置(CentOS7)
  10. 伴生对象-apply方法