| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: [c++] Primzahlengenerator: Ganzzahlige primzahlen im Forum Code Kitchen, in der Kategorie Software Home; Anzeige hi leute, hier mal mein (etwas schlecht programmierter) Primzahlengenerator. ich brauchte sowas für eine übung und jetzt wollte ich ...
![]() |
| | #1 (permalink) |
| Registriert seit: 13.09.05 ![]() Likes: 5 | Anzeige hi leute, hier mal mein (etwas schlecht programmierter) Primzahlengenerator. ich brauchte sowas für eine übung und jetzt wollte ich das teil mal on stellen. wie gesagt, wurde runtergecodet ohne jetzt drüber nachzudenken ob der code "schön" ist. ist leider auch etwas unkommentiert. wenn bedarf besteht, kommtentier ich das teil vielleicht!. (vielleicht: weil ichs ggfs. neu progge und zwar etwas sauberer) achso: dieser code ist absolut nicht effizient ;-) da kann selbst eine webseite die teile schneller berechnen *hihi* Code: // primzahlen generator
// der code ist nicht der beste,
// habs einfach "schnell" mal gecoded.
#include <math.h>
#include <iostream>
#include <vector>
#include <time.h>
using namespace std;
void primzahl(int max);
int main(){
int max;
cout << "Wieviele Primzahlen?\n";
cin >> max;
cout << "Primzahlen werden generiert\n";
primzahl(max);
return 0;
}
void primzahl(int max){
clock_t end, start;
start = clock();
double diff;
vector<int> primVec;
double checkMod1, checkMod2, checkMod3, doubleLast;
int pZahl = 6;
int selfZahl, intLast;
int k = 0;
primVec.push_back(2); primVec.push_back(3); primVec.push_back(5);
max -= 4;
do{
pZahl++;
checkMod1 = pZahl % 2;
checkMod2 = pZahl % 3;
checkMod3 = pZahl % 5;
if(checkMod1 == 0 || checkMod2 == 0 || checkMod3 == 0);
else { // ELSE 1
if(k=-1) k = 0;
while(k!=primVec.size())
{
selfZahl = primVec.at(k);
doubleLast = (double)pZahl/(double)selfZahl;
intLast = pZahl/selfZahl;
selfZahl *= selfZahl;
if(selfZahl == pZahl || doubleLast==intLast){
k = -1;
break;
}
k++;
}
if(k!=-1){
primVec.push_back(pZahl);
max--;
}
} // ende ELSE 1
} // ende do
while(max>=0);
end = clock();
for(unsigned int i=0;i<primVec.size();i++){
cout << primVec.at(i) << " ";
}
cout << endl;
diff = ((double)(end-start)/CLOCKS_PER_SEC);
cout << endl << "Zeit zum Berechnen: " << diff << " (in Sekunden)\n";
}
__________________ und? |
| | |
| | #2 (permalink) |
| Registriert seit: 28.07.08 ![]() Likes: 1 | Das isn scherz, oder? |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) | |
| Member of Honour ![]() | Zitat:
| |
| | |
| | #4 (permalink) | ||
| Themenstarter Registriert seit: 13.09.05 ![]() Likes: 5 | Zitat:
nope, die 7 ist die erste zahl die durch den prüfdurchlauf geht, ich glaube ich hätte da auch die 7 verwenden können, aber so einfach ist das nicht. da müsste ich auch die 13 einfügen ect..... weil 169 ist nicht durch 7 teilbar und ist lt. den prüfungen eine primzahl, jedoch ist 169 = 13*13, d.h. das wäre dann keine primzahl. achte mal auf die variable pZahl: Code: int pZahl = 6;
int selfZahl, intLast;
int k = 0;
primVec.push_back(2); primVec.push_back(3); primVec.push_back(5);
max -= 4;
do{
pZahl++;
.
.
. ich will nochmal andeuten, es gibt definitiv bessere verfahren hey ArnoNühm, was meinste mit "das isn scherz, oder?". wie gesagt, das teil habe ich einfach schnell runterprogrammiert und es findet sogar primzahlen (nur ganzzahlige). aber der code ist absolut ineffizient. es ist dazu gedacht maximal 100 primzahlen zu finden und das tut es noch relativ schnell und der code war auch schnell progrogrammiert (ca. 5 minuten). es gibt schönere verfahren, dessen bin ich mir bewusst, aber ich hatte keine zeit um etwas schlaues zu basteln
__________________ und? | ||
| | |
| | #5 (permalink) |
| Registriert seit: 28.07.08 ![]() Likes: 1 | Hab mich halt gewundert, warum da code ohne frage dazu gepostet wird. Einige Zeilen find ich da schon sehr merkwürdig und schwer lesbar. Code: doubleLast = (double)pZahl/(double)selfZahl;
intLast = pZahl/selfZahl;
selfZahl *= selfZahl;
if(selfZahl == pZahl || doubleLast==intLast){
...
##################################
if(pZahl%selfZahl == 0){
... Das k sollte man auch nicht missbrauchen, um festzustellen, ob man ne faktorisierung gefundnen hat und stattdessen nen zusätzliches flag einführen. Das macht es anderen leichter den code zu verstehen. Wenn du das ganze nen bsschen fixer haben möchtest könntetest du sieven. Hab da mal ne ähnliche Übung gemacht, als ich mit proggen angefangen hab. Ich suchs dir mal raus. edit: hier ist die sievefunction, die ich mal gebaut hab: Code: inline void setbit(unsigned int bit, unsigned int& bits)
{
bits |= (1 << bit);
}
inline bool getbit(unsigned int bit, unsigned int bits)
{
if((bits & (1 << bit)) != 0) return true;
return false;
}
inline void sieve(unsigned int* a,unsigned int sieveMax)
{
static unsigned sieved = 3;
unsigned current = 3;
for(;current <= sieveMax; current+=2)
{
if(!(getbit(current % 32, a[current / 32])))
{
unsigned i = current << 1;
while(i < sieved){i += current;}//die zeile hier ist wohl noch etwas suboptimal, dazu barucht es eigentlich keine loop
while(i <= sieveMax)
{
setbit(i % 32, a[i / 32]);//ist faktorisierbar
i += current;
}
}
}
sieved = sieveMax;
} |
| | |
| | #6 (permalink) | |
| Registriert seit: 08.03.07 ![]() Likes: 1 | Warum denn immer so kompliziert? Habe vor geraumer Zeit mal so ein kleines C-Prog geschrieben: Code: #include <stdio.h>
int main(int argc, char **argv)
{
unsigned long p, d, max;
char f;
if(argc<2)
max=1000;
else
max=strtoul(argv[1], NULL, 10);
printf("2\n");
for(p=3;p<=max;p+=2)
{
for(d=2,f=1;d*d<=p;d++)
{
if(!(p%d))
{
f=0;
break;
}
}
if(f)printf("%d\n",p);
}
return 0;
} Zitat:
Oder meinst du Primelemente in der Ringtheorie? mfg, loose | |
| | |
| | #7 (permalink) |
| Registriert seit: 22.10.05 ![]() Likes: 3 | Das "kompliziert" mag damit zu tun haben, dass diese Brute-Force-Methode auf Dauer schwerst ineffizient ist |
| | |
| | #8 (permalink) | |
| Registriert seit: 25.11.05 ![]() Likes: 0 | Zitat:
| |
| | |
| | #9 (permalink) | |
| Themenstarter Registriert seit: 13.09.05 ![]() Likes: 5 | Zitat:
aus irgendeinem grund dachte ich, es gibt auch nicht ganzzahlige primzahlen ![]() aber das "ganzzahlig" scheint wohl komplett überflüssig zu sein
__________________ und? | |
| | |
| | #10 (permalink) | |
| Registriert seit: 28.07.08 ![]() Likes: 1 | Zitat:
| |
| | |
| | #11 (permalink) | ||
| Senior Member | Zitat:
__________________ cu Chakky we are dreaming in digital we are living in realtime we are thinking in binary we are talking in IP welcome to our world | ||
| | |
| | #12 (permalink) |
| Registriert seit: 22.10.05 ![]() Likes: 3 | Deswegen sagte ich ja auch "diese Brute-Force-Methode". Ausserdem würde ich das Sieb des Eratosthenes nicht als Brute-Force bezeichnen, da bei Brute-Force ja das schlichte durchprobieren von allen Möglichkeiten im Vordergrund steht. |
| | |
| | #13 (permalink) | |||
| Themenstarter Registriert seit: 13.09.05 ![]() Likes: 5 | Zitat:
und da kein interese da war, hatte ich auch nur alles mal einfach geschrieben (im schnitt 2 - 3) damit ichs besteh' - hängen geblieben ist kaum etwas.... (was ich im falle mathe sehr bereue, aber is trotzdem machbar ;-P ) p.s.: zum erstenmal hab ich das gefühl was sinnvolles zu lernen und zu tun, das hatte ich definitv vorher kaum bis gar nicht gehabt - bis auf meine ausbildung, die mir ein wenig gebracht hatte, emfande ich alle anderen schulen für mich persönlich als zeitverschwendung, zumindest was das lernstoff betrifft (bis auf wenige ausnahmen!)
__________________ und? | |||
| | |
| | #14 (permalink) |
| Registriert seit: 16.02.06 ![]() Likes: 0 | Ich habe vor längerer Zeit mal einen Miller-Rabin-Primzahltest in C++ implementiert. Miller-Rabin-Test@My Bloq Dieser Test wird auch zum testen von sehr großen Primzahlen, wie für RSA benutzt. Zum generieren könnte ich auch noch Marsenne Primzahlen empfehlen, musst du halt noch testen. MFG Ace |
| | |
| | #15 (permalink) | ||
| Moderator ![]() Registriert seit: 30.03.04 ![]() Likes: 14 | Hallo, warum in die Ferne streifen, wenn das Nahe doch so gut ist: Programmieraufgaben - Primzahlen mit versch. Tests Irgendwie steig ich durch dein Code echt nicht durch, du machst da Operationen, die ich in dem Zusammenhang noch nie gesehen habe. Zitat:
Zitat:
| ||
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Primzahlen | T1G3R | Cryptography & Encryption | 3 | 31.10.08 13:08 |
| Primzahlen mit versch. Tests | Elderan | Programmieraufgaben | 22 | 07.05.07 17:53 |