判断素数

1到100质数 (素数) 和

北城以北 提交于 2019-11-27 13:38:09
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数; 否则称为合数:基本判断思路 在一般领域,对正整数n,如果用2到 之间的所有整数去除,均无法整除,则n为质数。 质数大于等于 2 不能被它本身和1以外的数整除 1 $arr = array(); 2 3 for ($i=2; $i<=100; $i++){ 4 $str = false; 5 for ($j=2; $i<=4 ? $j<$i : $j<=$i/2; $j++){ 6 7 if ($i % $j == 0){ 8 $str = false; 9 break ; 10 }else{ 11 12 $str = true; 13 14 } 15 16 } 17 18 if($str){ 19 array_push($arr,$i); 20 } 21 22 } 23 echo print_r($arr); PHP $arr = array(); for ($i=2; $i<=100; $i++){ $str = false; for ($j=2; $i<=4 ? $j<$i : $j<=$i/2; $j++){ if ($i % $j == 0){ $str = false; break ; }else{ $str = true; } } if($str){ array_push($arr,

幸运素数

Deadly 提交于 2019-11-26 23:39:14
幸运数是经由类似埃拉托斯特尼筛法的演算法后留下的整数集合,是在1955年波兰数学家乌拉姆提出。 由一组由1开始的数列为例: 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25, … 先将所有偶数删去,只留下奇数: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25,… 然后把数列中的第 2 个数字(设该数字为 x )的倍数对应的数删除,即把所有第 n x , x ∈ Z + 个数删除,例如上述例子中,第 2 数字是 3 ,所以删去所有第 3 n 个数: 1, 3, 7, 9, 13, 15, 19, 21, 25,… 新数列的第 3 项(每次都加上 1 )为 7 ,因此将新数列的第 7 n 个数删除: 1, 3, 7, 9, 13, 15, 21, 25,… 若一直重复上述的步骤,最后剩下的数就是幸运数 (以上内容来自维基百科 幸运数 ) 我们将既是幸运数又是素数的数叫做幸运素数 现在给你一个数 N ,请判断 N 是否是一个幸运素数 输入格式 第一行一个数 T ,代表有 T 个数 ( 1 ≤ T ≤ 2 × 10 5 ) 第 1 ∼ T 行,每行一个正整数 N ( 1 ≤ N ≤ 2 × 10 5 ) 输出格式 对于每个输入的数 N ,如果 N

100以内的质数

…衆ロ難τιáo~ 提交于 2019-11-26 19:43:24
  质数(prime number)又称 素数 ,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他 因数 ,这样的数称为质数。   求解一个算法,我们首先要知道它的数学含义.依据这个原则,首先我们要知道什么是素数.; 素数是这样的整数,它除了表示为它自己和1的乘积以外,无论他表示为任何两个整数的乘积。 找素数的方法多种多样。 1 #include <stdio.h> 2 #include<math.h> 3 4 void main(){ 5 int i,j; 6 for (i=2;i<100;i++){ 7 int flag=0; 8 for (j=2;j<sqrt(i);j++){//从2到sqrt(i)进行判断 9 if(i%j==0) flag=1;//若存在其他因子,flag=1 10 } 11 if(flag==0) printf("%d-",i);//flag==0则表示不存在除了1和本身的其他因子。可以输出。 12 } 13 }   1:是从2开始用“是则留下,不是则去掉”的方法把所有的数列出来(一直列到你不想再往下列为止,比方说,一直列到10,000)。第一个数是2,它是一个素数,所以应当把它留下来,然后继续往下数,每隔一个数删去一个数,这样就能把所有能被2整除、因而不是素数的数都去掉。在留下的最小的数当中,排在2后面的是3,这是第二个素数

数论

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-26 19:35:43
以下仅供个人整合资料使用,非本人原创 倍数 对于自然数 a, b,如果存在自然数 k,使得 ka = b,那么 b是 a 的倍数,称 a 整除 b,b 能被 a 整除,记做 a|b 一个数有无穷多个倍数 所有数都是自身和 1 的倍数 倍数具有传递性 在 [1, n] 范围内的 x 的倍数有 ⌊nx⌋个 约数 对于自然数 a, b,如果 b 是 a 的倍数,那么 a 是 b 的约数,又称因数 所有数的约数都包含自身和(或)1 一个自然数只有有限个约数,约数的个数通常记为 d(n) 打个表看看 n 1 2 3 4 5 6 7 8 9 10 d(n) 1 2 2 3 2 4 2 4 3 4 打表 int d[MAXN]; // 计算出 [1, n] 中每个数的约数个数 // 复杂度 O(n log n) void calc_divisors(int n) { for (int i = 1; i <= n; ++i) { // 枚举 i 的所有倍数 for (int j = i; j <= n; j += i) { d[j]++; } } } 素数与合数 如果一个数的约数只有两个(1 和自身),那么称它为素数(或者质数) 如果一个数有非平凡(除了 1 和自身以外)的约数,就称它为合数 1 既不是素数也不是合数! 素性判定: // 判断一个数是否为素数 bool is_prime(int x