素数

2020 我们用Java写素数程序

时间秒杀一切 提交于 2020-03-16 06:26:54
任何Java开发人员都需要回答的最常见问题之一就是如何用Java编写素数程序。它是有关领先的高级通用编程语言的基本概念之一。 有几种方法可以用Java编写程序来检查数字是否为质数。但是,基本逻辑保持不变,即您需要检查输入的数字(或已在程序中定义的数字)是否具有除1以外的除数,以及除数本身是否具有除数。 素数程序是学习Java必不可少的部分。因此,大多数有关Java的书籍都对此进行了介绍。在继续讨论Java中的质数程序之前,让我们首先了解质数的概念及其重要性。 质数–定义和重要性 除自身以外只能被1除的任何数字称为主要数字。3、5、23、47、241、1009都是素数的示例。虽然0和1不能满足质数的要求,但是2是整个无限长质数集中唯一的偶数质数。 质数表现出许多奇数的数学性质,这使它们成为广泛应用的理想选择,其中许多应用属于信息技术领域。例如,质数可用于伪随机数生成器和计算机哈希表。 在使用加密技术来隐藏信息的历史中,有很多实例。令人惊讶的是,这是使用质数对信息进行编码的过程。 随着计算机的引入,现代加密技术也被引入。生成复杂且更长的代码变得非常可行,这些代码很难破解。 大多数现代计算机密码学都依赖于利用大量的主要因素。由于质数是整数的基石,因此它们对数论家也至关重要。 进一步了解 素数在IT安全中 的 重要性 。 Java素数程序 如前所述,有几种方法可以用Java实现素数程序

python---100以内所有素数

对着背影说爱祢 提交于 2020-03-11 13:02:34
def get_primes(): """ 100以内的所有素数:每个数都对从2到其本身前一个数做整除, 遇到能整除就换下一个数. 如果从2到去本身前一个数都没有整除,则放到素数列表中. :return:素数列表 """ primes = [] for i in range(2, 100): for j in range(2, i): if i % j == 0: # 除1和自身还能整除其他数, 不是素数 break else: # 通过break跳出循环不执行 primes.append(i) return primes if __name__ == '__main__': # [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] print(get_primes()) 来源: https://www.cnblogs.com/KX-Lau/p/12461678.html

求100 以内的素数(python)

醉酒当歌 提交于 2020-03-09 18:46:17
# 质数的打印 import math l = [ ] # 只能够被 1 和自身 整除的数叫质数。 for i in range ( 2 , 100 ) : for j in range ( 2 , i ) : if i % j == 0 : break else : l . append ( i ) print ( l ) 来源: CSDN 作者: 云小哇 链接: https://blog.csdn.net/weixin_43495743/article/details/104756074

B1007 素数对猜想

独自空忆成欢 提交于 2020-03-08 18:29:35
思路: 素数对一定是两个奇数,所以在1-n范围内枚举奇数即可 C++代码: # include <cstdio> # include <cmath> bool isprime ( int n ) { if ( n <= 1 ) return false ; int sqr = ( int ) sqrt ( 1.0 * n ) ; for ( int i = 2 ; i <= sqr ; i ++ ) { if ( n % i == 0 ) return false ; } return true ; } int main ( ) { int n , count = 0 ; scanf ( "%d" , & n ) ; for ( int i = 3 ; i + 2 <= n ; i = i + 2 ) { if ( isprime ( i ) == true && isprime ( i + 2 ) == true ) { //素数对一定是两个奇数对 count ++ ; } } printf ( "%d\n" , count ) ; return 0 ; } `` 来源: CSDN 作者: S努力努力努力 链接: https://blog.csdn.net/u014424618/article/details/104736078

C/C++程序训练6---歌德巴赫猜想的证明 1136

落花浮王杯 提交于 2020-03-06 12:48:27
Problem Description 验证“每个不小于6的偶数都是两个素数之和”,输入一个不小于6的偶数n,找出两个素数,使它们的和为n。 Input 输入一个不小于6的偶数n。 Output 找出两个素数,使它们的和为n。只需要输出其中第一个素数最小的一组数据即可。 Sample Input 80 Sample Output 80=7+73 Hint Source # include <stdio.h> void even ( int x ) ; int isprime ( int x ) ; int main ( ) { int a ; scanf ( "%d" , & a ) ; if ( a % 2 == 0 ) even ( a ) ; return 0 ; } void even ( int x ) { int i ; for ( i = 2 ; i <= x - 1 ; i ++ ) if ( isprime ( i ) && isprime ( x - i ) ) { printf ( "%d=%d+%d\n" , x , i , x - i ) ; break ; } } int isprime ( int x ) { int i ; for ( i = 2 ; i <= x - 1 ; i ++ ) if ( x % i == 0 ) return 0 ;

[pat乙]1013 数素数

僤鯓⒐⒋嵵緔 提交于 2020-03-06 01:44:52
1013 数素数 (20 分) 1013 数素数 (20 分) 令 P​i​​ 表示第 i 个素数。现任给两个正整数 M≤N≤10​4​​,请输出 P​M​​ 到 P​N​​ 的所有素数。 输入格式: 输入在一行中给出 M 和 N,其间以空格分隔。 输出格式: 输出从 P​M​​ 到 P​N​​ 的所有素数,每 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 <math.h> using namespace std ; int primeNum [ 1000001 ] = { 2 , 3 , 5 , 7 } , index = 4 ; void prime ( int N ) { int k = 0 ; for ( int i = 3 ; i <= 1000001 ; i + = 2 ) { for ( int j = 3 ; j <= ( int ) sqrt ( i ) ; j ++ ) if ( i % j == 0 ) break ; else if ( j == ( int ) sqrt ( i )

[pat乙]1007 素数对猜想

♀尐吖头ヾ 提交于 2020-03-06 01:23:43
1007 素数对猜想 (20 分) 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。 输入格式: 每个测试输入包含1个测试用例,给出正整数N。 输出格式: 每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。 输入样例: 20 输出样例: 4 思路: 1.刚开始我写的时候是n^2循环并放入数组之后考虑,后来编译器出了问题,且一直是部分正确,于是我借鉴了一下其他博客的。 2.搜索对象从i——sqrt(n)——n/i降低时间复杂,加入bool函数拆分循环并取消string数组判断的步骤。 3.因为是素数对,所以判断对象直接由3到n-2。 4.因为素数不可能是偶数,所以直接n+=2. 5.只要过程中bool判断是一次素数,就直接交给下面判断对。 # include <iostream> # include <math.h> using namespace std ; bool isPrime ( int n ) { for ( int i = 3 ; i <= n / i ; i ++ ) if ( ! ( n % i ) ) return false ; return

40: 分拆素数和

≡放荡痞女 提交于 2020-03-04 13:00:45
40 分拆素数和 作者: xxx时间限制: 1S章节: 函数 问题描述 : 把一个偶数拆成两个不同素数的和,有几种拆法呢? 说明: 比如10,可以拆成3+7和5+5以及7+3, 但是3+7与7+3相同,只算一种,5+5由于两个素数相同,不计算在内。 因此,10的拆法只有一种。 输入说明 : 首先输入一个T(不超过500),然后输入T个正的偶数,其值不会超过10000。 输出说明 : 对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。 输入范例 : 4 4 6 8 10 输出范例 : 0 0 1 1 代码: #include <stdio.h> int main() { int hash[10000] = { 0 }; hash[0] = hash[1] = 1; for (int i = 2; i < 10000; i++) { if (hash[i] == 0) { for (int j = i + i; j < 10000; j = j + i) { hash[j] = 1; } } } int n, m; int num = 0; while (scanf("%d", &n) != EOF) { for (int k = 0; k < n; k++) { scanf("%d", &m); for (int i = 2; i < m/2; i++) { if ((hash

003 数素数

ぐ巨炮叔叔 提交于 2020-03-04 07:21:48
/* 题目描述 令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 <math.h> using namespace std ; void find ( int * p ) //寻找素数并保存在数组内 { int flag , temp = 1 ; //flag用来标识是否为素数,temp指示数组下标, p[0]置空 p [ temp ++ ] = 2 ; for ( int i = 3 ; i < 150000 ; i ++ ) { flag = 1 ; for ( int j = 2 ; j <= sqrt ( i ) ; j ++ ) //sqrt,开方函数,用于减少循环次数 { if ( i % j == 0 ) { flag = 0 ; break ; } } if ( flag == 1 ) p [ temp ++ ] = i ;

素数查找指定范围的素数

和自甴很熟 提交于 2020-03-03 16:52:50
首先素数的概念:一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除 1不是素数,只能被1和自身整除的数才是素数(也叫质数) 理论上,1能被1整除.也能被自身1整除,但在数学领域里.规定1不是素数。 实现步骤 为了能够每次运行时都可以定义查找素数的范围,所以用键盘录入 通过键盘录入录入一个查找范围,并且循环这个范围的每一个数字 每循环一个数字,对这个数字进行取余操作(只要取余结果==0则不是素数) 这个时候就与要定义一个boolean类型的变量,这个变量的初始值设为true(下面说原因) 取余操作,因为要对当前数字下除了1和本身外所有数字进行取余操作,所以再使用一个循环进行取余(取余结果等于零说明这个数不是素数,这个时候返回一个false,反之变量值不变) 取余这个循环完成后判断boolean变量==true,等于true说明是素数,打印输出 public static void main ( String [ ] args ) { // 键盘录入 Scanner sc = new Scanner ( System . in ) ; System . out . println ( "请输入一个开始的数字" ) ; int i = sc . nextInt ( ) ; System . out . println ( "请输入一个结束的数字" ) ; int j =