为什么我的程序在前10个回文数字后仍未继续?还有为什么我的isPrime方法没有为4号返回false?

时间:2016-03-22 02:49:54

标签: java primes palindrome

我不确定为什么我的ct并没有一直到100,尽管我明确地设定它直到它达到100.

public class PalindromicPrime
{
   public static void main(String [] args)
   {     


        int ct = 0;
          while(ct < 100)
          {
             if(isPalindrome(ct) && isPrime(ct))
             {
                if(ct % 10 != 0)
                {
                   System.out.print(ct + " ");
                }
                else
                {
                   System.out.print("\n");
                }
             }
             ct++;
          }
       public static boolean isPalindrome(int p) 
       {
          int palindrome = p;
          int reverse = 0;
          while (palindrome != 0) 
          {
             int remainder = palindrome % 10;
             reverse = reverse * 10 + remainder;
             palindrome = palindrome / 10;
          }
          if (p == reverse) 
          {
             return true;
          }
            return false;
       }

我假设我的isPrime代码错了,因为我的输出中得到了4。这种方法有什么问题?

       public static boolean isPrime(int p)
       {
          for(int i = 2; i < p/2; i++)
          {
             if(p % i == 0)
             {
                return false;
             }
          }
          return true;
       }

}

3 个答案:

答案 0 :(得分:1)

您应该在方法isPrime()中进行的第一次更改是更改此行

for(int i = 2; i < p/2; i++)

for(int i = 2; i <= p/2; i++) // you can easily find the reason why it is necessary(=)

并且你正在打印小于100的回文数字,这不是前100个回文数字,如果你想打印前100个回文数字,你可以拿另一个计数器跟踪打印的数字。

您可以像这样修改主要方法:

public static void main(String [] args)
   {     
        int ct = 0,n=0; // n to count numbers printed/found
          while(n < 100) // change the condition to check n<100
          {
             if(isPalindrome(ct) && isPrime(ct))
             {
                System.out.print(ct + " ");
                if(n % 10 == 0)
                {
                   System.out.println();
                }
                n++; // incementing n after a number is found!
             }
             ct++;
          }
    }

答案 1 :(得分:0)

将您的isPrime函数更改为以下内容(将<替换为<=,因为4/2为2且p = 4时循环不会运行):

public static boolean isPrime(int p) {
    for (int i = 2; i <= p / 2; i++) {
        if (p % i == 0) {
            return false;
        }
    }
    return true;
}

public static void main(String[] args) {
    int ct = 2;
    int count = -1;
    while (count < 99) {
        if (isPalindrome(ct) && isPrime(ct)) {
            count++;
            if (count % 10 == 0) {
                System.out.print("\n" );
            }   
                System.out.print(ct + " ");
        }
        ct++;
    }
}

唯一的数字是回文和素数且小于100:

1 2 3 5 7 11

尝试将值100更改为102.然后得到以下输出,因为101是11之后的下一个回文素数:

1 2 3 5 7 11 101 

答案 2 :(得分:0)

你的回文方法很好。这是你的isPrime方法无效,因为要检查一个数字是否为素数,你应该测试直到数字平方根的因子。所以条件的简单改变就应该这样做,

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

}