素数

来源:互联网 发布:核弹 知乎 编辑:程序博客网 时间: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
原创粉丝点击