【问题标题】:Changing the return type and also the last number to be printed更改返回类型以及要打印的最后一个数字
【发布时间】:2019-03-27 04:52:10
【问题描述】:

我有下面的java程序,它打印所有素数直到100,现在我想修改它,以便用户输入数字,它不会打印范围,但最后一个素数存在于该范围内,请告知如何修改下面的程序我还想将返回类型从字符串更改为 int 即                     

 class PrimeNumbers
 {
   public static void main (String[] args)
   {        
       int i =0;
       int num =0;
       //Empty String
       String  primeNumbers = "";

       for (i = 1; i <= 100; i++)         
       {              
          int counter=0;      
          for(num =i; num>=1; num--)
      {
             if(i%num==0)
         {
        counter = counter + 1;
         }
      }
      if (counter ==2)
      {
         //Appended the Prime number to the String
         primeNumbers = primeNumbers + i + " ";
      } 
       }    
       System.out.println("Prime numbers from 1 to 100 are :");
       System.out.println(primeNumbers);
   }
}

现在的输出是

Prime numbers from 1 to 100 are :
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

我只想打印最后一个素数

100

【问题讨论】:

  • 只是颠倒你的循环顺序,即for(i = 100; i&gt;1;i--)。当你找到一个素数时,break; 循环
  • 返回类型是void 而不是String。很明显,你从别人那里复制/粘贴了这个作业:(
  • @Jason 逻辑实际上看起来是正确的。建议 100 是素数是不正确的或错字,但 OP 永远不应该生成它。

标签: java


【解决方案1】:

尝试只为循环发现的最新质数保持状态:

public static void main (String[] args) {
    int i = 0;
    int num = 0;
    int prime;

    for (i = 1; i <= 100; i++) {         
        int counter = 0;      
        for (num = i; num >= 1; num--) {
             if (i % num == 0) {
                 counter = counter + 1;
             }
        }
        if (counter == 2) {
            prime = i;
        } 
    }    

    System.out.println("Last prime number from 1 to 100 is: " + prime);
}

【讨论】:

  • 老兄。我们喜欢让人们找到答案,而不是像这样简单的事情给他/她。帮助他们学习,而不仅仅是完成作业。 - 只是你的描述很完美!
  • @Steve 你的意思是说我的工作不是为每个人做作业​​?我希望你在 5 年前开始贡献时告诉我。
  • 哈!嗯,实际上有两种方式的争论。但网站负责人/所有者表示,如果可能的话,他们不仅愿意为人们做功课。 - 我今天刚刚完成了这个很棒的小实现,然后一个大人物在我发布答案之前关闭了这个问题。我虽然这个问题非常狭窄和合理,但@Hovercraft 告诉我它正在为他们做某人的功课。那家伙打架,说他没有做作业,气垫船发誓他是。这很有趣;)哦,好吧......
【解决方案2】:

建议的源代码可以写得更有条理:

public class PrimeNumbers {
    private static boolean isPrime(int n) {
        if (n == 2) return true;
        if (n % 2 == 0) return false;
        for (int i = 3; i <= Math.sqrt(n); i = i + 2)
            if (n % i == 0) return false;
        return true;
    }

    public static void main(String[] args) {
        int biggestPrimeNumber = 0;
        String primeNumbers = "";
        for (int n = 2; n <= 100; n++)
            if (isPrime(n)) {
                biggestPrimeNumber = n;
                //Appended the Prime number to the String
                primeNumbers += n + " ";
            }
        System.out.println("Prime numbers from 1 to 100 are: " + primeNumbers);
        System.out.println("Last prime number from 1 to 100 is: " + biggestPrimeNumber);
    }
}

为了检查一个数字的素数,有很多算法,比如Miller–Rabin primality test,但一个简单的蛮力方法是检查数字,直到所需数字的 sqrt。

【讨论】:

    【解决方案3】:

    您可能想要引入一个int 变量(int primeNumber),它将保存最大素数的值。对问题代码做了一些小改动:

    int i = 0;
    int num = 0;
    //Empty String
    int primeNumber = 0;
    
    for (i = 1; i <= 100; i++) {        
        int counter=0;      
        for(num =i; num>=1; num--) {
            if(i%num==0) {
                counter = counter + 1;
            }
        }
        if (counter ==2) {
            primeNumber =  i;
        } 
    }    
    System.out.println("Largest Prime number from 1 to 100 is : ");
    System.out.println(primeNumber);
    

    【讨论】:

      【解决方案4】:

      据我了解,您想打印接近 100 的最大素数。

       class PrimeNumbers
      {
         public static void main (String[] args)
         {        
         int i =0;
         int num =0;
         //Empty String
         String  primeNumbers = "";
      
         for (i = 1; i <= 100; i++)         
         {              
            int counter=0;      
            for(num =i; num>=1; num--)
         {
               if(i%num==0)
           {
          counter = counter + 1;
           }
        }
        if (counter ==2)
        {
           //Appended the Prime number to the String
           primeNumbers =  i+ "";
        } 
         }    
         System.out.println("Max prime number between 1 to 100 is:");
         System.out.println(primeNumbers);
        }
      }
      

      更新:

      这个程序可以进一步优化以提高时间复杂度

      public class  PrimeNumbers{
      
       public static void main (String[] args)
      {        
      int i =0;
      int num =0;
      
      int  primeNumbers = 0;
      
      for (i = 100; i >= 1; i--)         
      {              
        int counter=0;      
        for(num =i; num>=1; num--)
      {
           if(i%num==0)
       {
        counter = counter + 1;
       }
      }
      if (counter ==2)
       {
        primeNumbers =  i;
        break;
       } 
      }    
       System.out.println("Max prime number between 1 to 100 is:");
       System.out.println(primeNumbers);
      }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-20
        • 2018-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        • 2014-01-07
        • 2016-01-05
        相关资源
        最近更新 更多