我不确定为什么我的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;
}
}
答案 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;
}
}