最小质数

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

五迷三道 提交于 2019-12-05 00:23:18
例12 Eratosthenes筛法求质数 问题描述 Eratosthenes筛法的基本思想是:把某范围内的自然数从小到大依次排列好。宣布1不是质数,把它去掉;然后从余下的数中取出最小的数,宣布它为质数,并去掉它的倍数。在第1步之后,得到质数2,筛中只包含奇数;第2步之后,得到质数3,一直做下去,当筛中为空时结束。 用Eratosthenes筛法求给定区间内的所有质数。 输入格式 两个整数a和b,其中1≤a≤b≤10000 输出格式 输出给定范围[a,b]间的所有质数,输出时每个质数占6列,每行输出10个质数。 输入样例 100 200 输出样例 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 (1)编程思路。 下面采用自顶向下逐步求精的方法解决这个问题。 1)先写出程序的总体框架 初始化,将所有的数都放在筛子中; k=2; while(k<=N) { 用k将筛子中的数2*k、3*k、4*k …,一一筛去; 从当前下标k的下一个开始找到下一个仍在筛子中的数,并赋值给k; } 从2开始,将所有留在筛子中的数(即为质数)打印出来; 2)筛子的构造 为了表示一个筛子,并将给定范围N以内的数放入筛子中,可以定义一个一维数组 int prime[N+1]; 其中

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

有些话、适合烂在心里 提交于 2019-12-04 19:40:14
例11 求质数 问题描述 质数是指除了有1和自身作为约数外,不再有其他约数的数。比如:3、5、7是质数。而9不是质数,因为它还有约数3。 编写程序求给定区间中的所有质数。 输入格式 两个整数a和b,其中1≤a≤b≤100000。 输出格式 输出给定范围的所有质数,输出时每个质数占5列,每行输出10个质数。 输入样例 100 200 输出样例 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 (1)编程思路 判断一个数m是否为质数的方法是:用2~sqrt(m)中的每一个整数i去除m,若某一个i能整除m,则m不是质数;否则,m是质数。该操作可定义为一个函数,如下: int isPrime(int m) { int i; if (m==1) return 0; for (i=2;i<=sqrt(1.0*m);i++) if (m%i==0) return 0; return 1; } 求a~b之间的所有质数,写成一个循环,在循环中调用函数isPrime判断每个整数i是否为质数,若是,则计数并输出。 (2)源程序。 #include <stdio.h> #include <math.h> int isPrime(int m) { int i; if (m==1)

try

匿名 (未验证) 提交于 2019-12-03 00:11:01
若一个正整数无法被除了 1 和它本身的之外的任何自然数整除, 则称该为质数(素数),否则称该正整数为合数。 试除法 引理: 若一个正整数 N 为合数,则存在一个能整除 N 的数 T 且 2 ≤ T ≤ sqrt ( N ) 证明就不再赘述,读者可以自行验证: 因此,我们只需要枚举 \(2-\sqrt N\) 。只要这之中的所有数都不能被 \(N\) 整除,那么 \(N\) 就是质数了: #include <cmath> bool is_prime ( int n ) { if ( n < 2 ) return false ; for ( int i = 2 ; i <= sqrt ( n ); i ++) if ( n % i == 0 ) return false ; return true ; } //调用 (自定义方式) if ( is_prime ( x ))...; bool flag = is_prime ( x ); Eratosthenes 筛法 基本思想: 任意整数 x 的倍数 2x 、 3x …,都不是质数。 根据质数的定义,上述命题显然成立。 那么我们可以从 \(2\) 开始,由小到大扫描每个数 \(x\) ,把它的倍数( \(2x\) , \(3x…\) \(N/x\) (向下取整) \(*x\) )全部标记为合数。 若扫描到一个数时,它尚未被标记

2019.7.9 校内测试题 史密斯数

匿名 (未验证) 提交于 2019-12-02 23:47:01
 题目   史密斯数(smith.cpp,1s,128MB) 【问题描述】:   美国有一位数字家名叫阿尔伯特・威兰斯基,他姐夫史密斯非常喜欢研究数 学,所以两人经常在一起研讨各种数学问题。有时,两人碰不到一起,就习惯性 地用电话交流。   两人刚结束电话交谈,史密斯突然灵感来临,对威兰斯基的电话号码 “4937775”产生了兴趣,总觉得这是个特别的数。可它的特殊之处究竟在哪儿 呢?史密斯开始思索考证起来,他先把 4937775 分解质因数:4937775=3×5×5 ×65837,然后再把 4937775 所有质因数各位上的数字相加得:3+5+5+6+5 +8+3+7=42,接着他又把 4937775 各位上的数字相加得:4+9+3+7+7+7 +5=42,秘密终于找到了,原来这两个和相等。这真有意思,难道是巧合么?有   没有其他的数也有此特点呢?结果发现,所有质数都是具有如此特点。 后来的数学家们把这样的数叫做“史密斯数”,而且还决定质数(简单不复 杂)不属于斯密斯数。除质数之外还有许多数具有这样独特的性质,其中最小的 数是 4。大家不妨检查一下,4=2×2,2+2=4。类似有,22=2×11,2+2=2+1+ 1;27=3×3×3,2+7=3+3+3。   你的任务是寻找最接近而且大于给定的数的斯密斯数。 【输入文件】: 只有一行一个整数 N,N 不超过 8 位数字。

012-数据结构-树形结构-哈希树[hashtree]

匿名 (未验证) 提交于 2019-12-02 23:34:01
一、概述 1.1.、其他树背景   二叉排序树,平衡二叉树,红黑树等二叉排序树。在大数据量时树高很深,我们不断向下找寻值时会比较很多次。二叉排序树自身是有顺序结构的,每个结点除最小结点和最大结点外都有前驱和后继,不论是排序还是搜索它的综合性能比较好,但是单独在搜索这一方面二叉排序树的性能就可能没有Hash树快。 1.2、基础理论 1.2.1、质数分辨定理   什么是质数 : 即只能被 1 和 本身 整除的数。   为什么用质数:因为N个不同的质数可以 ”辨别“ 的连续整数的数量,与这些质数的乘积相同。     百度文库解答:https://wenku.baidu.com/view/16b2c7abd1f34693daef3e58.html   示例、从2起的连续质数,连续10个质数就可以分辨大约M(10) =2*3*5*7*11*13*17*19*23*29= 6464693230 个数,已经超过计算机中常用整数(32bit)的表达范围。连续100个质数就可以分辨大约M(100) = 4.711930 乘以10的219次方。   而按照目前的CPU水平,100次取余的整数除法操作几乎不算什么难事。在实际应用中,整体的操作速度往往取决于节点将关键字装载内存的次数和时间。一般来说,装载的时间是由关键字的大小和硬件来决定的;在相同类型关键字和相同硬件条件下