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

类别:Java 点击:0 评论:0 推荐:
//根据筛选法求出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.");
    }
}

本文地址:http://com.8s8s.com/it/it13291.htm