服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

一个根据筛选法求出100以内的所有素数的小程序

//根据筛选法求出100以内的所有素数,所谓筛选法是指从小到大筛去一个以知素数的所有倍数,
//例如,根据2我们可筛去4,6,8,...98,100等数.然后根据3可筛去9,15,...99等数(注意此时6,
//12等数早就被筛去了),由于4被筛去了,下一个用于筛选的素数是5...依次类推,最后剩余的就
//是100以内的素数.
/*
*auther starshus
*
*date 04/11/20
*/
//6.7.4
public class prime
{
    private static final int max=100;
    public static void init(int[] num)//定义数组,里面装从1到100
    {
        int i=0;
        for(;i<max;i++)
        {
            num[i]=i+1;
        }
    }
    public static int count(int[] num)//在程序运行后,计算素数个数
    {
        int n=0,i=0;
        for(;i<max;i++)
        {
            if(num[i]!=0)//非素数将被置零
               n++;
        }
        return n;
    }
    public static void printf(int[] num)//输出所有素数,每10个转行一次
    {
        int i=0,n=0;
        for(;i<max;i++)
            if(num[i]!=0)
            {
                system.out.print(num[i]+" ");
                n++;
                if(n%10==0)
                    system.out.println();
            }
    }
    public static void main(string[] args)//主方法
    {
        int i=2,j=1;
        int count;
        int[] numbers = new int[max];
        init(numbers);
        while (j<max)
        {
            if(numbers[j]!=0)
               while (i<max)
                {
                    if(numbers[i]!=0)
                    {
                        if(numbers[i]%numbers[j]==0)
                            numbers[i]=0;//如果不是素数,置零
                    }
                    i++;
                }
            j++;
            i=j+1;
        }
        count=count(numbers);
        printf(numbers);
        system.out.println();
        system.out.println("ok,we found "+count+"primes in "+max+" numbers.");
    }
}

扫描关注微信公众号