System.out.println () NOT GOING THROUGH
Author |
Message |
randint
|
Posted: Sat Aug 11, 2012 8:48 pm Post subject: System.out.println () NOT GOING THROUGH |
|
|
Java: |
import java.io.*;
public class prime
{
public static void main (String args [])
{
boolean error = false, primity = false;
int number = 0;
while (!error )
{
try
{
BufferedReader br = new BufferedReader (new InputStreamReader (System. in));
error = true;
while (number <= 0)
{
System. out. print ("Enter a positive integer: ");
number = Integer. parseInt (br. readLine ());
if (number <= 0)
{
System. out. println ("Positive integers only!");
}
}
if (number == 2 || number == 3 || number == 5)
{
primity = true;
}
else
{
if (number == 1)
{
primity = false;
}
else
{
char numberArray [] = Integer. toString (number ). toCharArray ();
if (numberArray [numberArray. length - 1] == '5' ||
numberArray [numberArray. length - 1] == '0' ||
numberArray [numberArray. length - 1] == '2' ||
numberArray [numberArray. length - 1] == '4' ||
numberArray [numberArray. length - 1] == '6' ||
numberArray [numberArray. length - 1] == '8')
{
primity = false;
}
else
{
int counter = 0;
for (int i = 2 ; i <= (int) Math. sqrt (number ) ; i++ )
{
if (number % i == 0)
{
counter++;
System. out. println(i );
}
}
if (counter > 0)
{
primity = false;
}
else if (counter == 0)
{
primity = true;
}
}
}
}
System. out. println ("The primity of the number " + number + " is " + primity );
}
catch (Throwable t )
{
error = false;
System. out. println ("Error " + t );
}
}
}
}
|
What the hell? I just played around with this prime number test thing and it refuses to give me the factors...
BTW: is there a better way to know that a number is absolutely prime? Fermat's Little Theorem does not do the job, or so it seems... |
|
|
|
|
 |
Sponsor Sponsor

|
|
 |
DemonWasp
|
Posted: Sun Aug 12, 2012 2:34 am Post subject: RE:System.out.println () NOT GOING THROUGH |
|
|
The reason that the System.out.println(i) call isn't getting invoked when you input (for example) 13 is because it's outputting the factors of 13 that are between 2 and floor(sqrt(13)); since 13 is prime, there aren't any.
You have an awful lot of code for a conceptually simple problem. Start by writing a function, static boolean isPrime ( int number ) that will return true if number is prime and return false if number is NOT prime.
For example, isPrime(1) is false, isPrime(2) and isPrime(3) are true, isPrime(4) is false, etc. You already have this mostly correct: just copy your for loop into the method. If any factor (which you have called i) evenly divides number (number % i == 0) then return false. If none of them do, then return true.
Fermat's Little Theorem isn't really suited to finding prime numbers, from what I can see on the Wikipedia page. |
|
|
|
|
 |
|
|