java - Primes and boolean logic -
i wanted write program find primes b wrote code (which worked):
public static void main(string[] args) { int a; int c; boolean isprime; = 2; c = 0; while(a <= 100000 ){ isprime = true; (int b = 2;b<a; b++){ c = a%b ; //system.out.println(c); if ( c == 0){ // stores every not prime number isprime = false; } } if (isprime){ system.out.println(a); } a=a+1; } } // main end
next tried write variation of code, did not work:
public static void main(string[] args) { int q; int w; boolean isprimeone = false; q = 2; w = 0; while(q <= 100){ isprimeone = false; (int d = 2; d<q; d++){ w = q%d; if( w != 0 ){ isprimeone = true; } } } if(isprimeone){ system.out.println(w); } w = w+1; }
it seems me first , second codes similar. difference (i see) initialized isprime
true
in first one, , false
in second one.
why first code work , second not?
the 2 code examples similar, opposite in initializations , handling of isprime
, isprimeone
variables.
the first code assumes number prime (true
) until factor found. proves number composite, it's set false
, stays way until loop finishes. 1 factor needed prove it's composite.
however, second code assumes number composite (false
) until number found isn't factor. because number found not factor doesn't mean it's prime. e.g. 20
doesn't have 3
factor, it's still composite. printing w
, remainder, instead of q
, number you're testing. incrementing w
instead of q
, , outside while
loop instead of inside while
loop.
Comments
Post a Comment