Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   Weet iemand waarom mijn Mersenne programma (in Java) niet verder gaat dan 2^31 - 1? (https://forum.scholieren.com/showthread.php?t=1481056)

Rob 02-10-2006 00:42

Weet iemand waarom mijn Mersenne programma (in Java) niet verder gaat dan 2^31 - 1?
 
Voor school moet ik een programma schrijven dat de eerste 10 Mersenne priemgetallen uitrekent (Een Mersenne priem is een priem die voldoet aan de vorm 2^n - 1).

Het programma werkt tot op n = 30 alles prima uit, maar bij n >= 31, blijft ie (2^31 - 1) % 2 uitrekenen. Wie weet waarom?

Hier is de code:

PHP-code:

 public class CollectionB {
  private static 
int numberOfPrimes 10;

  public static 
void main(String[] args) {
    
calculate();
  }

  private static 
void calculate() {
    
int primesFound 0;
    
int exponentToCheck 0;

    while(
primesFound numberOfPrimes) {
      
exponentToCheck++;

      
//Dubbele bereking, ja. Gren zin om te veranderen.
      
int maxDivisor = (int)(Math.pow(2exponentToCheck)) - 1;
      
int numberToCheck = (int)(Math.pow(2exponentToCheck)) - 1;
      
      
int divisor 2;

      
boolean isPrime true;

      while(
divisor maxDivisor && isPrime) {
        
isPrime numberToCheck divisor 0;
        
divisor++;
      }
      if(
isPrime) {
        
primesFound++;
        
System.out.println("Prime #" primesFound ": " numberToCheck);
      }
    }
  }


Enig idee? >.<

Manuzhai 02-10-2006 11:24

Je werkt met ints. Ik vermoed dat het 4-byte integers zijn, oftewel 32-bits, oftewel 2^32-1, maximaal.

pc nerd 02-10-2006 11:57

in java :confused:

Rob 02-10-2006 15:16

Citaat:

Manuzhai schreef op 02-10-2006 @ 12:24 :
Je werkt met ints. Ik vermoed dat het 4-byte integers zijn, oftewel 32-bits, oftewel 2^32-1, maximaal.
Hrm, zo heb ik nog niet gedacht. Ik moet dan zeker gebruik maken van Bigints oid?

fosje 02-10-2006 16:35

Code:

System.out.println("Byte: " + Byte.MAX_VALUE);
System.out.println("Integer: " + Integer.MAX_VALUE);
System.out.println("Long: " + Long.MAX_VALUE);
System.out.println("Float: " + Float.MAX_VALUE);
System.out.println("Double: " + Double.MAX_VALUE);

Code:

Byte: 127
Integer: 2147483647
Long: 9223372036854775807
Float: 3.4028235E38
Double: 1.7976931348623157E308

Kan er zo snel verder geen verzinnen

Warsocket 02-10-2006 17:00

Citaat:

Rob schreef op 02-10-2006 @ 16:16 :
Hrm, zo heb ik nog niet gedacht. Ik moet dan zeker gebruik maken van Bigints oid?
idd

ennu als je snel veel priemgetallen wilt uitrekenen, kan ik je geen java aanraden aangezien die taal niet echt snel is (virtual machine)

Rob 02-10-2006 17:12

Citaat:

Warsocket schreef op 02-10-2006 @ 18:00 :
idd

ennu als je snel veel priemgetallen wilt uitrekenen, kan ik je geen java aanraden aangezien die taal niet echt snel is (virtual machine)

Okay, dan.

Tsja, ik ben het helemaal met je eens en zou wel willen, maar er wordt een java programma verwacht + source. ;)

Manuzhai 03-10-2006 21:07

Citaat:

Warsocket schreef op 02-10-2006 @ 18:00 :
idd

ennu als je snel veel priemgetallen wilt uitrekenen, kan ik je geen java aanraden aangezien die taal niet echt snel is (virtual machine)

Java is in veel gevallen sneller dan C++. Dat het een geïnterpreteerde taal is zegt lang niet alles.

Dr HenDre 04-10-2006 17:45

zoo leuk als mensen appels met peren vergelijken :cool:

Chimera 05-10-2006 16:32

Citaat:

Manuzhai schreef op 03-10-2006 @ 22:07 :
Java is in veel gevallen sneller dan C++. Dat het een geïnterpreteerde taal is zegt lang niet alles.
Nee, het is in sommige vaak gecontrueerde gevallen sneller, niet in veel gevallen. Kwa snelheid kan er weinig op tegen geoptimaliseerde machinecode.

Niet dat het voor een huiswerkopdracht uberhaupt uitmaakt, maargoed.

eddie 05-10-2006 16:53

Citaat:

Manuzhai schreef op 03-10-2006 @ 22:07 :
Java is in veel gevallen sneller dan C++. Dat het een geïnterpreteerde taal is zegt lang niet alles.
Java is geen geïnterpreteerde taal...

eddie 05-10-2006 16:53

Citaat:

Chimera schreef op 05-10-2006 @ 17:32 :
Kwa snelheid kan er weinig op tegen geoptimaliseerde machinecode.

Dus Java (of .NET)

fosje 05-10-2006 17:50

Citaat:

eddie schreef op 05-10-2006 @ 17:53 :
Dus Java (of .NET)
nee, assembly

eddie 05-10-2006 18:59

Citaat:

fosje schreef op 05-10-2006 @ 18:50 :
nee, assembly
fout

dragonstorm 08-10-2006 02:04

java is wel een geinterpreteerde taal, tenminste, java bytecode is een geinterpreteerde taal.
Als het je huiswerk opdracht is om in *java* een priemgetallenprogramma te schrijven dat hogere getallen dan 2^31 kan berekenen, dan zou ik de java BigInt class eens uitzoeken. Nee, ik weet niet waar die staat en ik weet niet hoe die werkt. Maar het is wel wat je nodig hebt.

Er zijn een hoop talen (zoals Scheme) die standaard bigint support hebben. Scheme is erg makkelijk en er bestaan zeer snelle implementaties van. Misschien kun je je leraar ervan overtuigen dat het de moeite waard is om het daarin te doen? Het gaat immers om het algoritme, lijkt me.


Alle tijden zijn GMT +1. Het is nu 02:39.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.