grosse Zahlen benötigt

akrecords

Grünschnabel
Hi, ich habe von mein Prof hat bis nächsten Mittwoch die Aufgabe gegeben ein Programm zu schreiben das eine eingegebene Primzahl auf eine Mersenne Primzahl zu testen wovon es bisher ja nur 42 gibt und diese alle etwas größer als ein normaler integer sind :) hab den code bisher also nur für integer zahlen geschrieben was dann allerdings nur bei den ersten sehr kleinen Mersenne Zahlen richtig funktioniert. Jetzt ist meine Frage ob es irgendwo schon einen vorgefertigten Code oder eine Class gibt die ich implementieren könnte so das das Einlesen und auch Berechnen mit grossen Zahlen möglich ist.

Danke schon mal im vorraus an alle die sich die Zeit nehmen über mein Problem nachzudenken!


hier das Programm:
Code:
#include <iostream>

using namespace std;

int pn;

int exponent(int ex)
{
    int tmp = 2;
    for(int i=1; i<ex; i++) tmp = tmp*2;
    tmp = tmp-1;
    return(tmp);
}

bool IS_PRIME(int p)
{
    int m = exponent(p);
    int s = 4;
    int mod;
    for(int i = 0; i < (p-2); i++)
    {
        mod = ((s*s)-2) % m;
        if (mod == 0) return(true);
        s = mod;
    }
    return(false);
}

int main()
{
    cout<<"Please type in a prime number:  ";
    cin>>pn;
    if (IS_PRIME(pn) == true) cout<<"\n Your number is a Mersenne prime number";
        else cout<<"\n Your number is a normal prime number";
    cout<<"\n\n";
    system("pause");
    return(0);
}
 
Hi also ich hab jetzt mal die large.h von sourceforge verwendet aber jetzt habe ich das problem das ich unzählige linker errors bekomme aber ich weiss nicht wie ich die wegbekommen soll. mein prog und die large.h müssten in ordnung sein. ich benutze Dev-C++ zum programmieren.

hier noch mal der code:
Code:
#include <iostream>
#include "large.h"

using namespace std;

large pn;

large exponent(large ex)
{
    large tmp = 2;
    for(large i=1; i<ex; i++) tmp = tmp*2;
    tmp = tmp-1;
    return(tmp);
}

bool IS_PRIME(large p)
{
    large m = exponent(p);
    large s = 4;
    large mod,modtmp;
    for(large i = 0; i < (p-2); i++)
    {
        modtmp = ((s*s)-2)/m;
        mod = ((s*s)-2)-(m*modtmp);
        if (mod == 0) return(true);
        s = mod;
    }
    return(false);
}

int main()
{
    cout<<"Please type in a prime number:  ";
    cin>>pn;
    if (IS_PRIME(pn) == true) cout<<"\n Your number is a Mersenne prime number";
        else cout<<"\n Your number is a normal prime number";
    cout<<"\n\n";
    system("pause");
    return(0);
}

vielen dank noch mal im vorraus an alle die die mir helfen können oder es versuchen
 
Hi.

Vielleicht hättest du einfach mal die README und INSTALL Dateien lesen sollen:
INSTALL hat gesagt.:
4. Use LNC in a project

Right now, all you have to do is to add large.cpp to your sources
and #include large.h whenever needed.
Es reicht eben nicht aus nur die Deklarationen der Header Datei in deinem Programm verfügbar zu machen, sondern die Definitionen müssen ja auch irgendwo (spätestens beim Linken) verfügbar sein.

Gruß
 
Zurück