素数

判断输入的数字是否为素数

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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值