学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

【求助】求100内的素数

【求助】求100内的素数

要编一个程序,求100内的所有素数!
本人刚学Java,还不是很懂编程,只知道素数是没有约数的但是具体怎么表达则还不是很清楚~~~~~~~希望知道的告之一下,本人不胜感激~~~~~

TOP

public class Test {

    public static void main(String[] args) {
        // TODO 自动生成方法存根
        int count =0;
        int[] a = new int[100];
           for(int i=0;i<a.length;i++)  a[i]=1+i;//用数组保存1-100的整数
           a[0]=0;//1不是素数,所以设为0
           for(int i=1;i<a.length;i++)
           {
               if(a[i]==0) continue;
               for(int j=i+1;j<a.length;j++)  
                   if(a[j]%a[i]==0)
                       a[j]=0;//是a[i]倍数的元素设为0
           }
           System.out.println(1+"到"+a.length+"之间的素数为: ");
           for(int i=0;i<a.length;i++){
               if(a[i]!=0){
                   System.out.print(a[i]+"\t");
                   count++;
                   if(count%10==0)
                       System.out.println("\t");
                       
               }                   
           }
    }

}

TOP

求素数是的约数用'%'求余运算符
用循环表示
让j++;
如果temp%j == 0;
表示temp有约数,约数为j

多看看书,一般书上都会有的.
你的另一个主题我也帮你看了,那个要复杂一点

public class example2 {
    public static void main(String[] args) {
        final int MAX = 100;
        int temp = 1;
        int count = 1;
        System.out.println("100以内的质数是:");
            while(temp <= MAX)
            {
                int j =2;
                while(j <= Math.sqrt(temp) )
                {
                    if(temp%j == 0)
                        break;
                    j++;
                }
            if(j >Math.sqrt(temp))
            {
                System.out.print(temp+"\t");
                count ++;
            }
            if(count%10 == 0)
            {
                System.out.println();
                count = 1;
            }

            if(temp < 3)
                temp ++;
            else temp += 2;
           }
    }
}

TOP

谢了啊~~~~~~~~~~
天生孤独的思考~~~~~~~~~

TOP

给你更直观点的
class sushu
{
public static void main (String args[])
{
  int i,j;
  for(i=2;i<=100;i++)
   {
    for(j=2;j<i;j++)//出除比它小的数,若余数为零,则为它的约数,即跳出循环。
      if(i%j==0)
      {
      break;
      }
      if(j==i)
      System.out.println(i);
   }
}
}

TOP

给你更直观点的
class sushu
{
public static void main (String args[])
{
  int i,j;
  for(i=2;i<=100;i++)
   {
    for(j=2;j<i;j++)//出除比它小的数,若余数为零,则为它的约数,即跳出循环。
      if(i%j==0)
      {
      break;
      }
      if(j==i)
      System.out.println(i);
   }
}
}

TOP

meteor57,你将来会成为一名优秀的软件开发人员的——如果你愿意的话!别的没有一点水准可言!

TOP

引用:
以下是引用 ◎剑魔◎ 在 2008-4-2 14:36 的发言:

meteor57,你将来会成为一名优秀的软件开发人员的——如果你愿意的话!别的没有一点水准可言!
......有点受宠若惊了.
我学编程才几个月.但我不是计算机专业的.我学的多是数学.但觉得没什么前途,才希望向这编程方面发展吧.
谢谢你的鼓励.我会继续努力的.希望现在还不晚......

TOP

回复 5# 的帖子

你的虽然直观易懂,但却没有考虑效率.这样对以后写大型程序没什么好处.
又改了一点点.
public class example {
    public static void main(String[] args) {
        final int MAX = 100;
        int temp = 1;
        int count = 1;
        System.out.println("100以内的质数是:");
            while(temp <= MAX)
            {
                int j =2;
                while(j <= Math.sqrt(temp) )
                {
                    if(temp%j == 0)
                        break;
                    if(j < 3)
                        j ++;
                    else
                        j += 2;    
                }
            if(j >Math.sqrt(temp))
            {
                System.out.print(temp+"\t");
                count ++;
            }
            if(count%10 == 0)
            {
                System.out.println();
                count = 1;
            }
            if(temp < 3)
                temp ++;
            else temp += 2;
           }
    }
}

TOP

发新话题