素数
来源:互联网 发布:核弹 知乎 编辑:程序博客网 时间:2024/06/06 00:42
判断输入的数字是否为素数
package mooc;/* * 利用sqrt(x)判断是否为素数 */import java.util.Scanner;public class Prime_sqrt { public static void main(String[] args){ Scanner in=new Scanner(System.in); int x=in.nextInt(); boolean isPrime=true; if(x==1 || x%2==0 && x!=2)//排除1和所有偶数 { isPrime=false; } for (int i=3;i<Math.sqrt(x);i+=2)//对于被判断数,只用检测到sqrt(x)即可 { if(x%i==0) { isPrime=false; break; } } if (isPrime) { System.out.println(x+"是素数"); } else { System.out.println(x+"不是素数"); } }}
输出前50个素数(优化前)
package mooc;public class IsPrime { public static void main(String[] args) { int count=0; int test=2; while(count<50) { boolean isPrime=true; for(int i=2;i<test;i++) { if (test%i==0) { isPrime=false; break; } } if (isPrime) { count++; System.out.println("第"+count+"个素数为"+test); } test++; } }}
输出前n(需指定)个素数
package mooc;/* * 判断是否能被已知的且<x的素数整除 */public class Ex4_1 { public static void main(String[] args) { int[] primes=new int[50];//创建一个长度50的数组用来存放素数 primes[0]=2;//第一个元素为2 int cnt=1;//元素下标,同时也是已存放元素个数 MAIN_LOOP://外循环 for(int x=3;cnt<primes.length;x++)//从3开始进行遍历 { for(int i=0;i<cnt;i++)//i<cnt是因为要用已知素数去判断,而cnt为已知素数的个数 { if(x%primes[i]==0)//用已知素数能否整除x来判断x是否为素数 { continue MAIN_LOOP; //跳出内循环,x+=1,继续遍历下一个数 } } primes[cnt++]=x;//内循环遍历结束,x都不能被整除,将x存放在primes中。primes[cnt++]是指将x存放在当前cnt的位置primes[cnt],然后cnt+1指向下一个位置 } for(int k:primes)//for-each循环遍历数组元素 { System.out.print(k+" "); } System.out.println(); }}
计算第n个素数到第m个素数之间所有素数的和(不是所有数)
package mooc;import java.util.Scanner;public class Ex4_11 { public static void main(String[] args){ Scanner in=new Scanner(System.in); int n=in.nextInt(); int m=in.nextInt(); in.close(); int sum=0; int count=0; int test=2; while(count<m) { boolean isPrime=true; for(int i=2;i<test;i++) { if(test%i==0) { isPrime=false; break; } } if (isPrime) { count++; if(count>=n) { sum+=test; } } test++; } System.out.println(sum); }}
0 0