Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Primzahlen(komme nicht weiter)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
16.08.2006, 18:52 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Nein dann hast du irgendwas verstellt oder so.

Int ist bei einem 32 Bit System 32 Bit groß, bei einem 16 Bit System 16 Bit usw.


D.h. in einen 32 Bit Integer bekommst du zahlen von Minus ca 3 Milliarden bis + ca 3 Milliarden rein.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
16.08.2006, 19:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


signed 32bit -> -2,1mrd bis +2,1mrd, meist ist natürlich der negative bereich eins größer als der positive (rein vom betrag, was war das nochmal? 2er komplement?)

Also, oh sind natürlich nur ca 8mb irgendwie bin ich da wohl um 3 nullen zu weit rechts (links?) gerutscht. (und rechnen kann ich auch nicht 2*4 ist nun mal 8, nicht 16 )

er legt ein N-großes array an, das ergibt bei einem maximalen signed-int-wert von 2,1mrd 4*2,1mrd bytes -> 2 147 483 647 * 4 Bytes -> 8 589 934 588 Bytes
1MB sind 1024*1024*1024 -> 1 073 741 824

ergibt 7,999mb

imho ist beim vc die standard-stackreservierungsgröße so ka? 1mb?

Jedenfalls was ich sagen will, sind große arrays aufm heap besser aufgehoben.

Ansonsten ist eben der Algorithmus nicht ganz richtig.
--
class God : public ChuckNorris { };

Dieser Post wurde am 16.08.2006 um 19:10 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
16.08.2006, 20:06 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Ja ne er legt ein int Array mit 30000 Elementen an. Also 60000 Byte groß da sein Int ja irgendwie nur 16 Bit groß ist.

Oder hab ich irgendwas überlesen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
16.08.2006, 22:22 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, das kann nicht sein, da er kein winxp auf ner 16bit maschine zum laufen bringen würde. Was aber z.b wirklich nicht funktioniert:


C++:
int var[UINT_MAX];




dagegen funktioniert ein


C++:
int var[USHORT_MAX];



Jedoch ist das insgesamt alles nur ein Stackgrößenproblem.

Wenn man


C++:
int *var = new int[UINT_MAX];
...
delete[] var;



benutzt klappt das natürlich.

Auf nem 32Bit Intel oder AMD sind jedenfalls

char (8)
short (16)
int (32)
long (32)
long long (64)

Ansonsten einfahc mal folgendes programm: (etwaige header für printf sind hinzuzufügen)


C++:
int main(void)
{
  printf("char = %d\nshort = %d\nint = %d\nlong = %d\nlong long = %d\n", sizeof(char)*8, sizeof(short)*8, sizeof(int)*8, sizeof(long)*8, sizeof(long long)*8);
}



kann natürlich sein das der VC 6 "long long" nicht akzeptiert, da gibts einen __int64 imho aber auch schon auf dem vc6 (und wie der name schon sagt, 64bit).
}
--
class God : public ChuckNorris { };

Dieser Post wurde am 16.08.2006 um 22:24 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
17.08.2006, 15:05 Uhr
~Luciusperca
Gast


Danke erstmal für die vielen Tips

Bei meinem Code kommt jedenfalls bei ca. N=46000 nen Stackoverflow(???keine Ahnung warum).
Die Standart Stacksize liegt bei 1mb.

Ich denke mal das es in jedem Fall bessere Algorithmen für Primzahlen gibt aber da hab ich momentan keine Ideen.

Fallen euch vllt andere Algos ein mit dem man, möglichst bis ins unendliche,
Zahlen daraufhin prüfen lassen kann ob sie Primzahlen sind und falls das erfüllt ist sie ausegeben lässt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
17.08.2006, 18:48 Uhr
Hans
Library Walker
(Operator)



--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
17.08.2006, 19:43 Uhr
Bruder Leif
dances with systems
(Operator)


Der naive Ansatz wäre das hier:

C++:
#include <stdio.h>

int isPrim(int x)
{
    int i;

    if(x < 2) return 0;
    if(x < 4) return 1;
    if(x % 2 == 0) return 0;

    for(i=3; i<x/2; i+=2) /* eigentlich sqrt(x) */
        if(!(x % i))
            return 0;

    return 1;
}

int main()
{
    int i;

    for(i=0; ; i++)
        if(isPrim(i))
            printf("%8d", i);

    return 0;
}


--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
17.08.2006, 20:10 Uhr
~-Luciusperca--
Gast


THX THX THX THX THX THX THX THX THX THX THX THX THX THX THX THX THX THX THX

ganau danach habe ich gesucht(Post 16)

Gibt es eine Möglichkeit alle Zahlen in eine .txt Datei zu schreiben?

Probiert habe ich es hiermit, aber die Werte von i werden logischerweise immer wieder überschrieben:


C++:

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int isPrim(int x)
{
    int i;

    if(x < 2) return 0;
    if(x < 4) return 1;
    if(x % 2 == 0) return 0;

    for(i=3; i<x/2; i+=2) /* eigentlich sqrt(x) */
        if(!(x % i))
            return 0;

    return 1;
}

int main()
{

    ofstream dat_aus;
    string dateiname;

    cout << "Please Enter Destination File: ";
    cin >> dateiname;
    cout << endl;

    dat_aus.open(dateiname.c_str(), ios_base::out);

    if(!dat_aus)
    {
        cout << "ERROR: File cannot be opened!" << endl;
        return -1;
    }

    int i;

    for(i=0; ; i++)
        if(isPrim(i))
            printf("%8d", i);

    dat_aus << i << endl;



    return 0;
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
17.08.2006, 20:45 Uhr
xXx
Devil



C++:
for(unsigned int i=0; ; ++i)
{
    if (isPrim(i))
    {
        printf("%8d", i);
        dat_aus << i << endl;
    }
}
?

Aber du hast weder eine Abbruchbedingung für deine Schleife, noch eine manuellen abbruch deiner seits...

Aja... und du schließt die Datei nicht wieder...

Dieser Post wurde am 17.08.2006 um 20:46 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
17.08.2006, 21:55 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)



Zitat von xXx:
Aber du hast weder eine Abbruchbedingung für deine Schleife, noch eine manuellen abbruch deiner seits...

Also bitte, in Zeiten wo man seine backups mit TB beschriften muss is die größe einer .txt datei ja wohl unerheblich
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: