有关素数的基础算法

素数测试


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均为小写。

素数:素数判断、找素数、计算素数和、素数求和相关推荐

  1. MATLAB编程经典程序 素数的判断,求0~100素数之和

    clear sum=5;         %求0-100素数之和 ss=0;          %用来标定是否是素数,0表示不是 prime=[2 3];     %用来存放素数,2,3为素数,先放置 ...

  2. MATLAB函数判断绝对素数,自定义函数,找出 以内所有素数(质数)并计算它们的和,matlab...

    C++,VC2008,问题是 编写一个函数,找出3~1000之内,所有的素数.求高手!我在线等 #include#includevoidf(){//筛法charprime[1001];memset(p ...

  3. 经典编程习题,用Java实现:矩阵转置、最大公约数和最小公倍数、计算自然对数的底e的值、输出1000以内的回文素数、判断两个年份之间的平闰年情况。

    经典编程习题,用Java实现 1.矩阵转置 2.最大公约数和最小公倍数 3.计算自然对数的底e的值 4.输出1000以内的回文素数 5.判断两个年份之间的平闰年情况 1.矩阵转置 public cla ...

  4. C循环之整数的逆序、素数的判断、10以内的素数、输出前十个素数

    1.整数的逆序 #include<stdio.h> int main(){int a; scanf("%d",&a);//输入要计算的数 int b;int r ...

  5. Java黑皮书课后题第6章:**6.29(双素数)双素数是指一对差值为2的素数。例如,3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数。编写程序,找出小于1000的所有双素数

    6.29(双素数)双素数是指一对差值为2的素数.例如,3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数.编写程序,找出小于1000的所有双素数 题目 题目描述 破题 代码 运行示例 ...

  6. Python|每日一练|素数对|优化算法|素数|素数对:找出素数对

    找出素数对 任意输入一个大于10的偶数,编程找出所有和等于该偶数的素数对 以下程序实现了这一功能,请你填补空白处内容: h = 0 def a(h): x = 0 for j in range(2, ...

  7. 计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数

    我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n ...

  8. python用筛选法求解小于n的所有素数_python使用筛选法计算小于给定数字的所有素数...

    本文实例为大家分享了python计算小于给定数字的所有素数的具体代码,供大家参考,具体内容如下 代码思路:首先列出指定范围内所有候选数字,然后从前往后依次选择一个数字去除以后面所有数字,能够被整除的肯 ...

  9. python求小于n的所有素数_python使用筛选法计算小于给定数字的所有素数

    本文实例为大家分享了python计算小于给定数字的所有素数的具体代码,供大家参考,具体内容如下 代码思路:首先列出指定范围内所有候选数字,然后从前往后依次选择一个数字去除以后面所有数字,能够被整除的肯 ...

  10. 【算法】素数(质数)判断方法

    注:本篇文章已搬至个人博客中, 点击前往 素数(质数)的判断在算法问题中经常遇到,这里小结几种常用的判断方法. 素数(质数)的定义 首先,我们来看一下素数(质数)的定义:质数又称素数.一个大于1的自然 ...

最新文章

  1. 马化腾公开信:AI将成为基础设施,腾讯要打造“数字生态共同体”
  2. Live555研究之二Sleep实现
  3. Html5中的Video元素使用方法
  4. Mac下搭建手机APP开发环境(HBuilder X ,HTML5plus Runtime,MUI,springboot)
  5. es 时间字段聚合_ES聚合命令
  6. paip.提升用户体验----c++ c# 配色方案
  7. 2014.01.25 JFinal 使用经验积累
  8. 金属、指纹、全网通该有的都有 中兴小鲜3正式发布
  9. CSDN优质博主推荐(C/C++领域)-持续更新中
  10. 谷歌admob测试设备测试流程
  11. 悲!企业软件被360误认木马病毒!
  12. 何万青:直呼其名——我与中国计算机学会十年命运交织
  13. 在线TSV转SQL工具
  14. O光 E光 双折射现象
  15. 今天是国际数学日,既是爱因斯坦的生日又是霍金的忌日
  16. 五颜六色的幻想乡 - 矩阵树定理 - 拉格朗日插值
  17. 敏捷史话(四):敏捷是人的天性 —— Arie van Bennekum
  18. 极米、当贝、海信,争抢智能投影蛋糕
  19. 字符集与字符编码的基础知识
  20. word 编辑文章发现 空格变成省略号 换行符什么

热门文章

  1. linux清除文件后df还是满的,Linux系统下如何用du和df命令清除大文件?
  2. 降噪耳机哪款比较好?佩戴舒适的降噪蓝牙耳机推荐
  3. C语言>>百钱百鸡问题。鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何 ?
  4. HTTP请求方法介绍
  5. 安卓开发仿有道词典和谷歌翻译词典软件在线输入翻译源码下载
  6. Matlab求解微分方程数值解
  7. template template
  8. Telnet服务配置
  9. 花滑三周连跳_花滑未来能有人做五周跳吗 专家:四周半或是极限
  10. 群晖nas部署python项目