判断素数

问题 2111: 连环阵

本秂侑毒 提交于 2020-02-04 04:49:18
题目链接: https://www.dotcpp.com/oj/problem2111.html 题目来源:C语言网 题目描述    杰洛特主动出击狂猎的老巢,然而在此之前,他遇到了一个女术士,杰洛特想要女术士助自己一臂之力,她却出了一个难题给杰洛特,只有答对了才能与他同行   女术士给杰洛特一个四位数的素数,要求他说出这个四位数的数字的另外两个四位素数(从小到达输出),要求:   1.这个三个四位数组成等差数列   2.这三组数字的构成相同(即每个四位数都是其他数字的一种排列) 输入   多组数据输入      每次一个整数 输出   输出这三个数字,如果没有达成条件的三个数字,则输出"No" 样例输入   4817   1232 样例输出   1487 4817 8147   No   首先是题目的问题,此题并没有保证输入的四位数是素数(坑死…);对于这个题目我先预处理出来每个数是否是素数(埃式筛法),对于 n n n 先找出所有的排列( next_permutation() ),将其存入一个素数的数列当中(这里有一个坑点,有前导零的数字不算是四位素数…),首先判断 n n n 是否为素数,如果不是直接输入 N o No N o ,如果是素数就按照 n n n 在左边,中间和右边分别取枚举,如果存在满足条件的数列则输出,否则输出 N o No N o #include <

js四道基础编码题目兔子,素数,水仙花数,累加数

北慕城南 提交于 2020-02-04 03:22:19
题目1:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21… let mon = 10 ; //兔子生仔的月数 let m = [ 1 , 1 ] ; for ( j = 0 ; j < mon ; j ++ ) { if ( j == 0 || j == 1 ) { console . log ( ( j + 1 ) + "天兔子的数量:" + m [ j ] ) ; } else { m [ j ] = m [ j - 2 ] + m [ j - 1 ] ; console . log ( ( j + 1 ) + "天兔子的数量:" + m [ j ] ) ; } } 题目2:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 let sum = 0 ; for ( i = 101 ; i <= 200 ; i ++ ) { var a = 0 ; //通过a判断分离素数 for ( j = 2 ; j <= i - 1 ; j ++ ) { if ( i % j == 0 ) { var a = 1 ;

数素数 (20)

梦想的初衷 提交于 2020-02-04 00:08:06
数素数 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。 输入描述: 输入在一行中给出M和N,其间以空格分隔。 输出描述: 输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。 输入例子: 5 27 输出例子: 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 本题格式控制哪里出了问题弄了好久,突然发现一个小技巧,为了检测行末是否有空格可以使用“-”代替空格 # include <iostream> # include <cmath> using namespace std ; int findPrime ( int n ) { int flag = 0 ; for ( int i = 2 ; i <= sqrt ( n ) ; i ++ ) { if ( n % i == 0 ) { flag = 1 ; break ; } } if ( flag == 0 ) { return 1 ; } else { return 0 ; } } int main ( ) {

P3383 【模板】线性筛素数

陌路散爱 提交于 2020-02-03 23:20:57
P3383 【模板】线性筛素数 埃氏筛->欧拉筛 普通埃氏筛(O(nlognlogn)) for (int i = 2; i <= n; i++)//注意终止条件 { if(!notpri[i]) for(int j = 2; j * i <= n; j++) notpri[i*j]=true; } 优化 for (int i = 2; i <= n; i++)//到根号 { if(!notpri[i]) for(int j = i; j * i <= n; j++)//j从i开始,因为[2、3..i - 1] * i之前再筛[2、3..i - 1]时已经筛过 notpri[i*j]=true; } 但这样还有重复! 比如24,删2时、删3时、删4时,都删了一次!(12,8,6被优化省了) 欧拉筛(线性筛) 思想:让每个合数只被最小质因数筛去 过程(摘自[_mliy]( https://www.luogu.com.cn/blog/222223/solution-p3383 )) 避免重复筛,应找到筛合数的一种原则:这个合数只会被它的最小质因数筛。这样能保证每个合数只会被筛一次。 (运行过程)从 22 开始,22 加入 prime 数组,再从小到大枚举质数(现在只有 22),筛掉质数与 22 的乘积(44 被筛掉)。 到了 33,33 加入 prime 数组,从小到大枚举质数(此时有

PTA L1-028 判断素数 C语言版

走远了吗. 提交于 2020-02-03 20:50:33
本题的目标很简单,就是判断一个给定的正整数是否素数。 输入格式: 输入在第一行给出一个正整数 N (≤ 10),随后 N 行,每行给出一个小于2^31的需要判断的正整数。 输出格式: 对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No。 输入样例: 2 11 111 输出样例: Yes No 代码: # include <stdio.h> # include <math.h> int main ( ) { int k ; scanf ( "%d" , & k ) ; while ( k -- ) { int i , n , f = 1 ; scanf ( "%d" , & n ) ; if ( n == 1 ) printf ( "No\n" ) ; else { for ( i = 2 ; i <= sqrt ( n ) ; i ++ ) { if ( n % i == 0 ) f = 0 ; } if ( f == 1 ) printf ( "Yes\n" ) ; else printf ( "No\n" ) ; } } return 0 ; } 来源: CSDN 作者: lmtxy 链接: https://blog.csdn.net/weixin_44318053/article/details/104157822

C语言经典例12-输出素数

♀尐吖头ヾ 提交于 2020-02-03 03:27:54
目录 1 题目 2 分析 3 实现 3.1 实现1(常规暴力方法,效率低) 3.2 实现2(稍微优化) 3.3 实现3(最终优化,这个方法推荐记下来) 4 运行结果 1 题目 判断并输出101到200之间的素数 2 分析 本题的关键是输出素数,素数又叫质数,指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,必须为正整数,1和0既非素数也非合数,所以在写判断素数的函数时 第一步首先判断给的数是否大于2,若小于2,则直接判断为非素数, 第二步则用一个 for 循环来对小于该数的各个数依次取余,若取余后等于0,则它不是素数,那么容易得出 实现1 ,仔细想想可以发现,一个数去除以比它的一半还要大的数,一定是除不尽的,这用不着判断,所以要改进 for 循环中的循环控制语句,改为 i < n/2 + 1 ,见 实现2 那么还可以再优化吗?答案是可以的,在数学上有个规律,对于一个小于 n 的整数 x ,若 n 不能整除 x ,则 n 必定不能整数 n/x ,那么带来一个明显的优化就是循环控制语句从 2 到 n \sqrt{n} n ​ 即可,因为在判断2的同时也判断了 n/2 ,循环到 n \sqrt{n} n ​ 时,就把 2 到 n-1 都判断了,所以要改进 for 循环中的循环控制语句,改为 i <= sqrt(n) ,见 实现3 。 3 实现 3.1 实现1(常规暴力方法

24: 素数

心不动则不痛 提交于 2020-02-01 17:00:56
24 素数 作者: XXX 时间限制: 1S 章节: 循环 问题描述 : 判断一个数是不是素数 输入说明 : 第一行为N 下面N行,每行一个数字n 输出说明 : 判断n是不是素数,是就输出yes,否则输出no 输入范例 : 3 897 23 97 输出范例 : no yes yes 代码: #include <stdio.h> int main() { int n, m; int flag = 1; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &m); for (int j = 2; j < m; j++) { if (m%j == 0) { flag = 0; break; } } if (flag == 0) { printf("no\n"); } else { printf("yes\n"); } flag=1; } return 0; } 来源: https://www.cnblogs.com/VictorierJwr/p/12248837.html

素数算法大全

拥有回忆 提交于 2020-02-01 05:18:44
注意: 如果没有特殊说明, 以下讨论的都是针对n为素数时的时间复杂度 1. 根据概念判断: 如果一个正整数只有两个因子, 1和p,则称p为素数. 代码: bool isPrime(int n) { if(n < 2) return false; for(int i = 2; i < n; ++i) if(n%i == 0) return false; return true; } 时间复杂度O(n). 2. 改进, 去掉偶数的判断 代码: bool isPrime(int n) { if(n < 2) return false; if(n == 2) return true; for(int i = 3; i < n; i += 2) if(n%i == 0) return false; return true; } 时间复杂度O(n/2), 速度提高一倍. 3. 进一步减少判断的范围 定理: 如果n不是素数, 则n有满足1<d<=sqrt(n)的一个因子d. 证明: 如果n不是素数, 则由定义n有一个因子d满足1<d<n. 如果d大于sqrt(n), 则n/d是满足1<n/d<=sqrt(n)的一个因子. 代码: bool isPrime(int n) { if(n < 2) return false; if(n == 2) return true; for(int i = 3;

求素数算法-网摘

自闭症网瘾萝莉.ら 提交于 2020-02-01 04:10:42
摘自: http://www.cnblogs.com/luluping/archive/2010/03/03/1677552.html 浅析求素数算法 注意: 如果没有特殊说明, 以下讨论的都是针对n为素数时的时间复杂度 1. 根据概念判断: 如果一个正整数只有两个因子, 1和p,则称p为素数. 代码: bool isPrime(int n) { if(n < 2) return false; for(int i = 2; i < n; ++i) if(n%i == 0) return false; return true; } 时间复杂度O(n). 2. 改进, 去掉偶数的判断 代码: bool isPrime(int n) { if(n < 2) return false; if(n == 2) return true; if(n%2==0) return false; for(int i = 3; i < n; i += 2) if(n%i == 0) return false; return true; } 时间复杂度O(n/2), 速度提高一倍. 3. 进一步减少判断的范围 定理: 如果n不是素数, 则n有满足1<d<=sqrt(n)的一个因子d. 证明: 如果n不是素数, 则由定义n有一个因子d满足1<d<n. 如果d大于sqrt(n), 则n/d是满足1<n/d<

浅析求素数算法

那年仲夏 提交于 2020-02-01 04:09:26
浅析求素数算法 转载: http://www.linuxsir.org/bbs/showthread.php?t=278294 注意: 如果没有特殊说明, 以下讨论的都是针对n为素数时的时间复杂度 1. 根据概念判断: 如果一个正整数只有两个因子, 1和p,则称p为素数. 代码: 1 bool isPrime(int n)2 {3 if(n < 2) return false;4 for(int i = 2; i < n; ++i)5 if(n%i == 0) return false;6 return true;7 } 时间复杂度O(n). 2. 改进, 去掉偶数的判断 代码: bool isPrime(int n) { if(n < 2) return false; if(n == 2) return true; for(int i = 3; i < n; i += 2) if(n%i == 0) return false; return true;} 时间复杂度O(n/2), 速度提高一倍. 3. 进一步减少判断的范围 定理: 如果n不是素数, 则n有满足1<d<=sqrt(n)的一个因子d. 证明: 如果n不是素数, 则由定义n有一个因子d满足1<d<n. 如果d大于sqrt(n), 则n/d是满足1<n/d<=sqrt(n)的一个因子. 代码: bool isPrime