素数

10.11JAVA作业

亡梦爱人 提交于 2019-12-27 01:01:55
[ 实验任务 一 ] : 素数输出 1、 实验要求: ( 1)编写判断该数是否为素数的方法,并在主方法中对其进行调用。 ( 2) 注意编程规范:程序开头部分的目的,作者以及日期;必要的空格与缩进,适当的注释等; ( 3)实验报告中要求包括程序设计思想、程序流程图、源代码、运行结果截图、编译错误分析等内容。 2、 实验内容 ( 1)计算并输出3~100之间的素数。 ( 2)编程满足下列要求: 1)按照每行5个输出; 2)输出任意两个整数之间的所有素数; 3)输入两个整数,输出这两个整数之间的最大的10个和最小的10个素数。 代码 1 思想 利用创建扫描器实现输入,判断素数运用了布尔返回值。再判断素数函数中运用强制类型转换实现数的开方变整数 INT 型, 2 直接返回真值,其他的开方如果在最大数为开方值的循环中输入数 number 除以 i 求余为 0 则返回 false 计算完都没有 0 则返回 true 。利用函数判断数是否为素数加 num 和 am 实现计数最后输出完。在输出一遍前十个数和后 10 个数。 2 流程图 package YANG;//王重阳 信1705-2 20173600 import java.util.Scanner; public class YANG535 { public static void main(String[] args) { System.

java02实验:方法

☆樱花仙子☆ 提交于 2019-12-27 01:00:24
一:素数输出 1. 实验要求: (1)编写判断该数是否为素数的方法,并在主方法中对其进行调用。 (2)注意编程规范:程序开头部分的目的,作者以及日期;必要的空格与缩进,适当的注释等; (3)实验报告中要求包括程序设计思想、程序流程图、源代码、运行结果截图、编译错误分析等内容。 2. 实验内容 (1)计算并输出3~100之间的素数。 (2)编程满足下列要求: 1)按照每行5个输出; 2)输出任意两个整数之间的所有素数; 3)输入两个整数,输出这两个整数之间的最大的10个和最小的10个素数 3.程序设计思想: 首先要了解素数的定义在大于1的自然数中,不存在除了1和它本身的因数。了解定义后,就知道要用循环语句依次求余来判断。我采用在类外定义一个只有一个参数的函数,来实现判断这个参数是否为素数。任意两个整数之间的素数输出,我用for语句将他们分别定义为初始条件和结束条件,然后又定义了一个计数器,实现每行五个输出,最后的最大和最小素数,只用了一个动态数组Arraylist,正反输出就解决了 4.源代码: 1 package java课堂; 2 3 /*20173442 信1705-3 田昕可*/ 4 5 import java.util.*; 6 7 public class Zuoye2 { 8 9 10 11 12 13 public static void main(String[]

求素数

纵然是瞬间 提交于 2019-12-25 22:19:31
简单遍历: bool isprime(int n) { int s = sqrt( double(n) )+1; //对n开根号 for(int i=2;i<=s;i++) //n除以每个比n开根号小比1大的自然数 if(n%i==0) //如果有能被整除的,则不是质数 return 0; return 1; } 筛法求素数: 筛法求质数,效率最高,但会比较浪费内存   首先建立一个boolean类型的数组,用来存储你要判断某个范围内自然数中的质数,例如,你要输出小于200的质数,你需要建立一个大小为201(建立201个存储位置是为了让数组位置与其大小相同)的boolean数组,初始化为true。   其次用第二种方法求的第一个质数(在此是2),然后将是2的倍数的数全置为false(2除外),即2、4、6、8……位置上置为false。然后是3的倍数的全置为false(3除外),一直到14(14是200的开平方),这样的话把不是质数的位置上置为false了,剩下的全是质数了,挑着是true的打印出来就行了。 #define N 1000 bool isprm[N]; void isprime() { int i,j,k=0; int s,e=sqrt( double(N) )+1; //sqrt是对于double数开平方 memset(isprm,1,sizeof(isprm));

判断素数

本秂侑毒 提交于 2019-12-24 10:47:05
举例:筛选从1—n的所有素数 第一种 暴力判断,无优化。直接根据素数的定义判断即可 # include <stdio.h> int main ( ) { int n = 1000 , flag = 1 ; int prime [ 25 ] = { 0 } ; for ( int i = 2 ; i <= n ; i ++ ) { flag = 1 ; for ( int j = 2 ; j < i ; j ++ ) if ( i % j == 0 ) flag = 0 ; if ( flag ) prime [ i ] ++ ; } for ( int i = 1 ; i <= n ; i ++ ) if ( prime [ i ] ) printf ( "%d\n" , i ) ; } 第二种 素数的倍数一定不是素数,对其进行标记。最后遍历一遍数组,可得未被标记的即为筛选出的素数。 比第一种快了一些,但仍有可以改进的地方,因为在标记的时候有重复标记,因此这个地方也可以再优化一下 # include <stdio.h> int prime [ 1100 ] = { 0 } ; //初始化0,假设全部是素数,标记为0; int main ( ) { int n = 1000 , cnt = 0 ; //cnt计数,表示下标 for ( int i = 2 ; i <= n ; i +

打印6个30以内的素数

独自空忆成欢 提交于 2019-12-23 06:49:29
目的:找出6个30以内的素数 #打印30以内的6个素数(素数:只能被1和它本身整除的整数) #思路:2以外的偶数都不是素数,只判断奇数 print(2) #n是我们要判断是否为素数的变量 n = 3 #count变量用于计算当前有多少素数 count = 1 #is_prime布尔变量,假设所有的数都是素数。判断是否为素数,若不是则改为False is_prime = True while n <= 30: if n % 2 == 0: n += 1 continue #continue后直接回到while循环 #下面是n为奇数,for循环的意义是n不能被其他整数整除,i是2到n-1的所有整数 for i in range(2,n): if n % i == 0: is_prime = False break #break执行时,直接跳出FOR循环 #i遍历完所有的值之后,is_prime的值依旧不变时,则为True,说明当前n为素数 if is_prime == True: print(n) try: count += 1 if count == 6: break except: print("catch the error") else: is_prime = True #继续执行下一次循环,直到count==6或者n>30 n += 1 优化方法: #优化方法 原理

7-5 素数对猜想

你离开我真会死。 提交于 2019-12-22 20:11:09
时间限制: 400 ms 内存限制: 64 MB 代码长度限制: 16 KB 让我们定义d​n​​ 为:d​n​ =p​n+1​​ −pn​​ ,其中p​i​​ 是第i个素数。显然有d​1​​ =1,且对于n>1有d​n是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数N(<10 ​5 ​​ ),请计算不超过N的满足猜想的素数对的个数。 输入格式: 输入在一行给出正整数N。 输出格式: 在一行中输出不超过N的满足猜想的素数对的个数。 输入样例: 20 输出样例: 4 本题可以采用标记法标记出小于n的所有素数的位置,再判断中间间隔一个的素数对有多少 # include <stdio.h> # include <stdlib.h> # include <math.h> int main ( ) { int x [ 100000 ] = { 0 } ; //先初始化为“0”,认为全部为偶数,在进行判断; int n , count = 0 ; int i , j ; scanf ( "%d" , & n ) ; for ( i = 2 ; i <= n ; i ++ ) { for ( j = 2 ; j <= sqrt ( i ) ; j ++ ) //注意由于时间限制只有400ms所以不能用j<=n,否则会超时; if ( i % j == 0 )

Java判断一个数是否是素数

会有一股神秘感。 提交于 2019-12-22 00:11:18
/** * 判断一个数是否是素数 * @param num * @return */ public static boolean isPrimeNumber ( int num ) { int i = 2 ; //0和1都不是素数,排除 boolean flag = num == 0 || num == 1 ? false : true ; while ( i < num ) { if ( num % i == 0 ) { flag = false ; break ; } i ++ ; } return flag ; } 来源: CSDN 作者: null_able 链接: https://blog.csdn.net/weixin_45665626/article/details/103648505

python应用-判断回文素数

こ雲淡風輕ζ 提交于 2019-12-21 21:01:07
from math import sqrt number=int(input('请输入一个整数:')) def is_prime(num): for rea in range(2,int(sqrt(num)+1)): if num%rea==0: return False return True if num !=1 else False def is_palindrome(num): temp=num total=0 while temp>0: total=total * 10+temp % 10 temp//=10 return num==total if is_palindrome(number) and is_prime(number) : print('%d是回文素数:' % number) else: print('%d不是回文素数:' % number) 结果: 请输入一个整数:56465 56465不是回文素数:    来源: https://www.cnblogs.com/68xi/p/8546398.html

1151:素数个数

家住魔仙堡 提交于 2019-12-21 01:55:21
【题目描述】 编程求2~n(n为大于2的正整数)中有多少个素数。 【输入】 输入n(2≤n≤50000)。 【输出】 素数个数。 【输入样例】 10 【输出样例】 4 #include <iostream> bool prime(int); int main() { using namespace std; int i,n; cin>>n; int count=0; for(i=2;i<=n;i++) { if(prime(i)) { count++; } } cout<<count<<endl; return 0; } bool prime(int n) { int i; for(i=2;i<=n/2;i++) { if(n%i==0) return false; } return true; } 来源: CSDN 作者: C_Dreamy 链接: https://blog.csdn.net/C_Dreamy/article/details/103634033

DHU-1215 七夕节 (素数筛选)

做~自己de王妃 提交于 2019-12-20 19:04:31
七夕节 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12718 Accepted Submission(s): 3505 Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!" 人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下: 数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6. 你想知道你的另一半吗? Input 输入数据的第一行是一个数字T(1<=T<=500000),它表明测试数据的组数.然后是T组测试数据,每组测试数据只有一个数字N(1<=N<=500000). Output 对于每组测试数据,请输出一个代表输入数据N的另一半的编号. Sample Input 3 2 10 20 Sample Output 1 8 22   刚刚知道了素数筛选的思想,它将焦点放在组成合数的单位上,而不是放在单个数字上,这样的话,问题就被转换了,假设 A过程为求约数的过程 , B过程为求倍数的过程,那么 对 N 个数的求因数问题的叠加 就可以看作是 M