素数:素数判断、找素数、计算素数和、素数求和
有关素数的基础算法
素数测试
package 素数;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class 素数的判定 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);long n=sc.nextLong();if(is_prime(n))System.out.println("yes");elseSystem.out.println("no");System.out.println(disvisor(n));}//素数测试public static boolean is_prime(long n){for(int i=2;i*i<=n;i++){if(n%i==0)return false;}return n!=1;//1是一个例外}//约束枚举public static ArrayList<Long> disvisor(long n){ArrayList<Long> res=new ArrayList<>();for(long i=1;i*i<=n;i++){if(n%i==0){res.add(i);if(i!=n/i)res.add(n/i);}}return res;}//这个我还是没有弄懂//整数分解public static Map<Integer,Integer> prime_factor(int n){Map<Integer,Integer>res=new HashMap<>();for(int i=2;i*i<=n;i++){while(n%i==0){res.put(n/i,i++);}}if(n!=1)res.put(n,1);return res;}}
埃氏筛法
代码
package 素数;import java.util.Scanner;public class 素数的个数 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);int n=sc.nextInt();int[] prime=new int[n];//第i个素数boolean[] is_prime=new boolean[n+1];//is_prime[i]位true表示i是素数//返回n以内的素数的个数int p=0;for(int i=0;i<=n;i++)is_prime[i]=true;is_prime[0]=is_prime[1]=true;for(int i=2;i<=n;i++){if(is_prime[i]){prime[p++]=i;//prime[0]=i,p++for(int j=2*i;j<=n;j+=i)is_prime[j]=false;}}System.out.println(p);//for(int i=0;i<n;i++)//System.out.println(prime[i]);}}
区间筛法
有小问题的代码
package 素数;import java.util.Scanner;public class 区间内素数的个数 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);int a=sc.nextInt();int b=sc.nextInt();boolean[] is_prime=new boolean[1000005];//is_prime[i]位true表示i是素数int bb=(int)Math.sqrt(b);boolean[] is_prime_small=new boolean[46350];//对区间[a,b)内的整数执行筛法,is_prime[i-a]=true等价于i是素数for(int i=0;i<bb;i++){is_prime_small[i]=true;}//题目给的范围太大,根本不可能开出那么大的数组,所以用r-l来存储for(int i=0;i<b-a;i++){is_prime[i]=true;}for(int i=2;i<bb;i++){if(is_prime_small[i]){for(int j=2*i;j<bb;j+=i)is_prime_small[j]=false;//筛选2,根号bfor(int j=(int) (Math.max(2l,(a+i-1)/i)*i);j<b;j+=i)is_prime[j-a]=false;//筛选a,b}}int cnt = 0;for(int i=a;i<=b;i++){if(is_prime[i-a])cnt++;}System.out.println(cnt);}}
代码(都不是很好,因为我不知道C++里面的LONG转换到java里面,怎么才能使它不溢出)
package 素数;import java.util.ArrayList;
import java.util.Scanner;public class 区间内素数的个数1 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);int a=sc.nextInt();int n=sc.nextInt();//int[] prime=new int[n];//第i个素数ArrayList<Integer> prime=new ArrayList<>();boolean[] is_prime=new boolean[n+1];//is_prime[i]位true表示i是素数//返回n以内的素数的个数int p=0;for(int i=0;i<=n;i++)is_prime[i]=true;is_prime[0]=is_prime[1]=true;for(int i=2;i<=n;i++){if(is_prime[i]){prime.add(i);p++;//prime[p++]=i;//prime[0]=i,p++for(int j=2*i;j<=n;j+=i)is_prime[j]=false;}}for(int i=0;i<prime.size();i++){if(prime.get(i)<a){p--;}elsebreak;}if(prime.get(prime.size()-1)==n)p--;System.out.println(p);}}
素数求和
题目
问题描述输入一个自然数n,求小于等于n的素数之和样例输入2样例输出2数据规模和约定测试样例保证 2 <= n <= 2,000,000
package 素数;import java.util.ArrayList;
import java.util.Scanner;public class 素数求和 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);int n=sc.nextInt();ArrayList<Integer> prime=new ArrayList<>();boolean[] is_prime=new boolean[n+1];for(int i=0;i<=n;i++)is_prime[i]=true;is_prime[0]=is_prime[1]=true;for(int i=2;i<=n;i++){if(is_prime[i]){prime.add(i);for(int j=2*i;j<=n;j+=i){is_prime[j]=false;}}}long sum=0;for(int i=0;i<prime.size();i++){sum+=prime.get(i);}System.out.println(sum);}}
计算素数和
题目
问题描述完成一个程序,该程序计算n以内(包含n)的所有素数之和并返回。注意,提交完整的程序代码。输入格式输入一个整数 n;输出格式输出n以前所有素数的和。样例输入5样例输出10
代码
package 素数;import java.util.ArrayList;
import java.util.Scanner;public class 计算素数和 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);int n=sc.nextInt();ArrayList<Integer> prime=new ArrayList<>();boolean[] is_prime=new boolean[n+1];for(int i=0;i<=n;i++)is_prime[i]=true;is_prime[0]=is_prime[1]=true;for(int i=2;i<=n;i++){if(is_prime[i]){prime.add(i);for(int j=2*i;j<=n;j+=i)is_prime[j]=false;}}long sum=0;for(int i=0;i<prime.size();i++){sum+=prime.get(i);}System.out.println(sum);}}
找素数
题目
问题描述给定区间[L, R] , 请计算区间中素数的个数。输入格式两个数L和R。输出格式一行,区间中素数的个数。样例输入2 11样例输出5数据规模和约定2 <= L <= R <= 2147483647 R-L <= 1000000
代码
package 素数;import java.util.ArrayList;
import java.util.Scanner;public class 找素数 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);long a=sc.nextLong();long b=sc.nextLong();ArrayList<Integer> prime=new ArrayList<>();boolean[] is_prime=new boolean[2147483647];int p=0;for(int i=0;i<b;i++)is_prime[i]=true;is_prime[0]=true;for(int i=1;i<b;i++){if(is_prime[i]){prime.add(i+1);p++;for(int j=2*i-1;j<b;j+=i)is_prime[j]=false;}}for(int i=0;i<prime.size();i++){if(prime.get(i)<a)p--;elsebreak;}System.out.println(p);}}
素数判断
题目
编写一函数IsPrime,判断某个大于2的正整数是否为素数。样例输入: 5样例输出:yes样例输入: 9样例输出:no注意:是素数输出yes,不是素数输出no,其中yes和no均为小写。
素数:素数判断、找素数、计算素数和、素数求和相关推荐
- MATLAB编程经典程序 素数的判断,求0~100素数之和
clear sum=5; %求0-100素数之和 ss=0; %用来标定是否是素数,0表示不是 prime=[2 3]; %用来存放素数,2,3为素数,先放置 ...
- MATLAB函数判断绝对素数,自定义函数,找出 以内所有素数(质数)并计算它们的和,matlab...
C++,VC2008,问题是 编写一个函数,找出3~1000之内,所有的素数.求高手!我在线等 #include#includevoidf(){//筛法charprime[1001];memset(p ...
- 经典编程习题,用Java实现:矩阵转置、最大公约数和最小公倍数、计算自然对数的底e的值、输出1000以内的回文素数、判断两个年份之间的平闰年情况。
经典编程习题,用Java实现 1.矩阵转置 2.最大公约数和最小公倍数 3.计算自然对数的底e的值 4.输出1000以内的回文素数 5.判断两个年份之间的平闰年情况 1.矩阵转置 public cla ...
- C循环之整数的逆序、素数的判断、10以内的素数、输出前十个素数
1.整数的逆序 #include<stdio.h> int main(){int a; scanf("%d",&a);//输入要计算的数 int b;int r ...
- Java黑皮书课后题第6章:**6.29(双素数)双素数是指一对差值为2的素数。例如,3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数。编写程序,找出小于1000的所有双素数
6.29(双素数)双素数是指一对差值为2的素数.例如,3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数.编写程序,找出小于1000的所有双素数 题目 题目描述 破题 代码 运行示例 ...
- Python|每日一练|素数对|优化算法|素数|素数对:找出素数对
找出素数对 任意输入一个大于10的偶数,编程找出所有和等于该偶数的素数对 以下程序实现了这一功能,请你填补空白处内容: h = 0 def a(h): x = 0 for j in range(2, ...
- 计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数
我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n ...
- python用筛选法求解小于n的所有素数_python使用筛选法计算小于给定数字的所有素数...
本文实例为大家分享了python计算小于给定数字的所有素数的具体代码,供大家参考,具体内容如下 代码思路:首先列出指定范围内所有候选数字,然后从前往后依次选择一个数字去除以后面所有数字,能够被整除的肯 ...
- python求小于n的所有素数_python使用筛选法计算小于给定数字的所有素数
本文实例为大家分享了python计算小于给定数字的所有素数的具体代码,供大家参考,具体内容如下 代码思路:首先列出指定范围内所有候选数字,然后从前往后依次选择一个数字去除以后面所有数字,能够被整除的肯 ...
- 【算法】素数(质数)判断方法
注:本篇文章已搬至个人博客中, 点击前往 素数(质数)的判断在算法问题中经常遇到,这里小结几种常用的判断方法. 素数(质数)的定义 首先,我们来看一下素数(质数)的定义:质数又称素数.一个大于1的自然 ...
最新文章
- 马化腾公开信:AI将成为基础设施,腾讯要打造“数字生态共同体”
- Live555研究之二Sleep实现
- Html5中的Video元素使用方法
- Mac下搭建手机APP开发环境(HBuilder X ,HTML5plus Runtime,MUI,springboot)
- es 时间字段聚合_ES聚合命令
- paip.提升用户体验----c++ c# 配色方案
- 2014.01.25 JFinal 使用经验积累
- 金属、指纹、全网通该有的都有 中兴小鲜3正式发布
- CSDN优质博主推荐(C/C++领域)-持续更新中
- 谷歌admob测试设备测试流程
- 悲!企业软件被360误认木马病毒!
- 何万青:直呼其名——我与中国计算机学会十年命运交织
- 在线TSV转SQL工具
- O光 E光 双折射现象
- 今天是国际数学日,既是爱因斯坦的生日又是霍金的忌日
- 五颜六色的幻想乡 - 矩阵树定理 - 拉格朗日插值
- 敏捷史话(四):敏捷是人的天性 —— Arie van Bennekum
- 极米、当贝、海信,争抢智能投影蛋糕
- 字符集与字符编码的基础知识
- word 编辑文章发现 空格变成省略号 换行符什么