判断素数

例题7-4 素数环 Java

白昼怎懂夜的黑 提交于 2020-03-01 03:02:42
题目 输入正整数n,把整数1,2,3,…,n组成一个环,使得相邻两个整数之和为素数。输出时从整数1开始逆时针排列。同一个环应恰好输出一次。n<<16. 样例输入: 6 样例输出: 1 4 3 2 5 6 1 6 5 2 3 4 static int n ; static int [ ] A ; static int [ ] vis ; public static void main ( String [ ] args ) { Scanner sc = new Scanner ( System . in ) ; n = sc . nextInt ( ) ; A = new int [ n ] ; A [ 0 ] = 1 ; vis = new int [ n + 1 ] ; dfs ( 1 ) ; } static void dfs ( int cur ) { if ( cur == n && isp ( A [ 0 ] , A [ n - 1 ] ) ) { for ( int i = 0 ; i < n ; i ++ ) { System . out . print ( A [ i ] ) ; } System . out . println ( ) ; } for ( int i = 2 ; i <= n ; i ++ ) { if ( vis [ i ] == 0 &&

python求绝对素数

白昼怎懂夜的黑 提交于 2020-02-28 06:53:15
如果一个自然数是素数,且它的数字位置翻转后仍为素数(翻转指:157->751),则称为绝对素数。试求出所有的两位绝对素数。 代码如下: def judgement_primes ( x ) : #该函数判断是否时素数 if x == 1 : return False for i in range ( 2 , x ) : if x % i == 0 : return False return True def reverse ( x ) : #该函数将整数逆序 ret = 0 while x : last = x % 10 ret = ret * 10 + last x //= 10 return ret a = [ int ( number ) for number in input ( "请输入范围:" ) . split ( ) ] b = [ ] for i in range ( a [ 0 ] , a [ 1 ] + 1 ) : if judgement_primes ( i ) : if judgement_primes ( reverse ( i ) ) : b . append ( i ) for x in b : print ( x ) 运行结果: 来源: CSDN 作者: I数据小白I 链接: https://blog.csdn.net/zz619333126

《程序设计基础与实验》期末考试第2场2018-2019学年第一学期

核能气质少年 提交于 2020-02-24 11:02:06
《程序设计基础与实验》期末考试第2场2018-2019学年第一学期 这里收集了我当时的期末考卷,这里包括程序填空题、函数题和编程题。大家可以看看当做复习练习用。 想看选择判断的请进 《程序设计基础与实验》期末考试第1场2018-2019学年第一学期 程序填空题: 5-1 数学家希尔伯特在1900年国际数学家大会的报告上提出一个“孪生素数猜想”,即:存在无穷多个素数p,使得p + 2也是素数。p和p+2这一对差为2的素数,被称为“孪生素数”。看起来,这个猜想是成立的,我们总能找到很多对孪生素数,例如:3和5, 5和7, 11和13…… 但这一猜想至今还未被证明。下面这段程序对于输入的整数n,寻找大于n的最小的一对孪生素数p和q(q=p+2)。根据所提供的运行示例,将程序补充完整。 运行示例如下: 输入示例1: 1 输出示例1: 3 5 输入示例2: 5 输出示例2: 11 13 #include <stdio.h> #include <math.h> int isPrime(int num) { if(num==1) return 0; for(int i=2; i<=sqrt(num); i++) if( num%i==0(2分) ) return 0; return 1; } int main(void) { int n; scanf("%d",&n); if(n<3)

验证哥德巴赫猜想(函数专题)

余生颓废 提交于 2020-02-24 07:47:09
题目描述 哥德巴赫猜想大家都知道一点吧。我们现在不是想证明这个结论,而是对于任给的一个不小于6的偶数,来寻找和等于该偶数的所有素数对。做好了这件实事,就能说明这个猜想是成立的。 要求程序定义一个prime()函数和一个main()函数,prime()函数判断一个整数n是否是素数,其余功能在main()函数中实现。 int prime(int n) { //判断n是否为素数, 若n为素数,本函数返回1,否则返回0 } 输入 一个偶数M (M是6到1000000之间的一个偶数). 输出 输出和等于该偶数的所有素数对a和b,按a递增的顺序输出,(a,b)和(b,a)被视为同一个素数对。 样例输入 40 样例输出 3 37 11 29 17 23 # include <stdio.h> # include <math.h> int prime ( int a ) { int b = 2 , flag = 1 ; do { if ( a % b == 0 ) { flag = 0 ; break ; } b ++ ; } while ( b <= sqrt ( a ) ) ; //该方法可以避免2与3的存在 return flag ; //判断素数 } int main ( ) { int a , b , c , d , e , g ; scanf ( "%d" , & a ) ; for

素数筛专题精讲

自作多情 提交于 2020-02-23 22:52:18
素数筛 筛法的思想是去除要求范围内所有的合数,剩下的就是素数 了,而任何合数都可以表示为素数的乘积,因此如果已知一 个数为素数,则它的倍数都为合数。 事前需知: 1.sizeof和strlen的区别 strlen计算字符串的长度,以’\0’为字符串结束标志 sizeof是分配的数组实际所占的内存空间大小,不受里面存储内容 2.每种类型的变量都有各自的初始化方法,memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为: # include <string.h> void * memset ( void * s , int c , unsigned long n ) ; memset() 函数函数的功能是:将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。 一.复杂度:nlogn long long su [ max ] , cnt ; bool isprime [ max ] ; void prime ( ) { cnt = 1 ; memset ( isprime , 1 , sizeof ( isprime ) ) ; //初始化认为所以数都是素数

筛法求素数的几个模板

て烟熏妆下的殇ゞ 提交于 2020-02-23 11:23:17
定义法 素数可以由定义法求出,即遍历2到sqrt(x)中是否存在能整除x的数,如果存在则不是素数,如果不存在,则是素数,复杂度是O(n)。在数据量小的时候可以使用。 bool isprime(int x) // 判断素数 { if ( x<=1 ) return false; for (int i = 2; i*i<=x; i++) if (x%i==0) return false; return true; } 一般线性筛法 当数量级变大时,如果要找出某个范围内的素数,那么时间复杂度很容易过不去。因此考虑这样一个命题: 若一个数不是素数,则必然存在一个小于它的素数作为其因数。 该命题很容易证明其正确性 所以我们假设已经获得小于一个数x的所有素数,那么判断时就只需要看x是否能被这些素数整除,来判断x是不是素数。 但这样依然需要大量的枚举测试工作,因此换一个角度:当获得一个素数时,即将他所有的倍数均标记为非素数。这样一来,遍历是,如果这个数没有被标记,就说明它就无法被小于它的书整除,则可以认定为素数。 #define MAXSIZE 10001 int Mark[MAXSIZE]; int prime[MAXSIZE]; //判断是否是一个素数 Mark 标记数组 index 素数个数 int Prime(){ int index = 0; memset(Mark,0,sizeof

郑州轻工业大学OJ python1092: 素数表(函数专题)

好久不见. 提交于 2020-02-22 18:54:19
1092: 素数表(函数专题) 题目描述 输入两个正整数m和n,输出m和n之间的所有素数。 要求程序定义一个prime()函数和一个main()函数,prime()函数判断一个整数n是否是素数,其余功能在main()函数中实现。 int prime(int n) { //判断n是否为素数, 若n为素数,本函数返回1,否则返回0 } 对于C/C++代码的提交,本题要求必须通过定义prime函数和main函数实现,否则,提交编译错误,要提交完整的程序。 输入 输入两个正整数m和n,m<=n,且都在int范围内。 输出 输出占一行。输出m和n之间的所有素数,每个数后有一个空格。测试数据保证m到n之间一定有素数。 样例输入 2 6 样例输出 2 3 5 def prime ( i ) : m = i if m == 1 : return 0 k = m ** 0.5 k = int ( k ) for i in range ( 2 , k + 1 ) : if m % i == 0 : return 0 return 1 m , n = map ( int , input ( ) . split ( ) ) for i in range ( m , n + 1 ) : if prime ( i ) != 0 : print ( "%d" % i , end = ' ' ) 来源: CSDN

求质数(素数)的方法——厄拉多塞筛法(转载) ---2020.2.18

两盒软妹~` 提交于 2020-02-19 10:51:36
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。合数是由若干个质数相乘而得到的。所以,质数是合数的基础,没有质数就没有合数。 【1】一般方法 素数是除了1和它本身之外再不能被其他数整除的自然数。由于找不到一个通项公式来表示所有的素数,所以对于数学家来说,素数一直是一个未解之谜。像著名的 哥德巴赫猜想、孪生素数猜想,几百年来不知吸引了世界上多少优秀的数学家。尽管他们苦心钻研,呕心沥血,但至今仍然未见分晓。 自从有了计算机之后,人们借助于计算机的威力,已经找到了2216091以内的所有素数。 求素数的方法有很多种,最简单的方法是根据素数的定义来求。对于一个自然数N,用大于1小于N的各个自然数都去除一下N,如果都除不尽,则N为素数,否则N为合数。 但是,如果用素数定义的方法来编制计算机程序,它的效率一定是非常低的,其中有许多地方都值得改进。 第一,对于一个自然数N,只要能被一个非1非自身的数整除,它就肯定不是素数,所以不 必再用其他的数去除。 第二,对于N来说,只需用小于N的素数去除就可以了。例如,如果N能被15整除,实际 上就能被3和5整除,如果N不能被3和5整除,那么N也决不会被15整除。 第三,对于N来说

查找素数

人盡茶涼 提交于 2020-02-19 07:24:58
转载 素数的定义很简单,如果一个数如果只能被 1 和它本身整除,那么这个数就是素数。 不要觉得素数的定义简单,恐怕没多少人真的能把素数相关的算法写得高效。比如让你写这样一个函数: // 返回区间 [2, n) 中有几个素数 int countPrimes ( int n ) // 比如 countPrimes(10) 返回 4 // 因为 2,3,5,7 是素数 你会如何写这个函数?我想大家应该会这样写: int countPrimes ( int n ) { int count = 0 ; for ( int i = 2 ; i < n ; i ++ ) if ( isPrim ( i ) ) count ++ ; return count ; } // 判断整数 n 是否是素数 boolean isPrime ( int n ) { for ( int i = 2 ; i < n ; i ++ ) if ( n % i == 0 ) // 有其他整除因子 return false ; return true ; } 这样写的话时间复杂度 O(n^2),问题很大。首先你用 isPrime 函数来辅助的思路就不够高效;而且就算你要用 isPrime 函数,这样写算法也是存在计算冗余的。 先来简单说下如果你要判断一个数是不是素数,应该如何写算法。只需稍微修改一下上面的 isPrim

java小程序(二)

帅比萌擦擦* 提交于 2020-02-18 08:32:21
【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 package case50; /** * * 【程序2】 * 题目:判断101-200之间有多少个素数,并输出所有素数。 * 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 * @author 眼睫毛能扫地 * */ public class Case02 { public static void main(String[] args) { for (int num = 101; num < 200; num++) { boolean is = true; for (int i = 2; i <= Math.sqrt(num); i++) { if (num % i == 0) { is = false; break; } else { is = true; } } if (is) { System.out.println(num); } } } } 来源: https://www.cnblogs.com/YanJieMao/p/12324690.html