判断输入的数字是否为素数
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);
}
}