Problem bei Primzahlenaufgabe
-
Schon mal die Suchfunktion benutzt? Es gibt genug Thread bzgl. Primzahlen.
-
_matze schrieb:
- Du brauchst nur bis y/2 zu iterieren. Alles darüber kann sowieso nicht mehr geteilt werden.
sogar nur bis sqrt(y).
--> http://en.wikipedia.org/wiki/Trial_division
-
Ja suchfunktion habe ich benutzt, aber hab nichts genaues dazu gefunden wie ich es in c1 mache.
also nach deinen korrekuten matze ungefähr so:?prog aufgabe int primzahl (int y) { int i; for(i=2; i<y/2; i++) if ( y % i == 0 ) { return 0; } return 1; } { int x; read(x); if (primzahl(x)) { print(x); print(" ist eine Primzahl.\n"); } else { print(x); print(" ist keine Primzahl.\n"); } }
-
Es ist ineffizient, alle Zahlen zwischen 2 ... y/2 bzw. 2 ... sqrt(y) zu testen. Es reicht vollkommen, nur die ungeraden Zahlen zu testen und vorher noch die geraden und ein paar Sonderfälle:
#define TRUE 1 #define FALSE 0 int isPrime (unsigned int number) { unsigned int i; // 1 ist per Definition keine Primzahl. if (number == 1) return FALSE; // Primzahlen kleiner als 10 (bei denen funzt die sqrt-Variante nicht). if (number == 2 || number == 3 || number == 5 || number == 7) return TRUE; // Gerade Zahlen. if (number % 2 == 0) return FALSE; // Ungerade Zahlen. for (i = 3; i <= sqrt (number); i += 2) if (number % i == 0) return FALSE; return TRUE; }
-
Ja hmm so schön dass auch aussieht, nur in c1 glaub ich nicht dass ich
#define und sqrt verwenden kann.es soll sehr einfach sein das programm.
Also kann mir einer sagen was momentan noch falsch ist in meinen einfachen c1 programm?
-
C1 ???
Was ist das?
-
eine einfache Programmiersprache
-
Ich glaube hier kann keiner c1. Steht irgendwo eine Dokumentation zu c1? Mit normalem c kommt man hier scheinbar nicht weiter.
-
sqrt(number) braucht man nicht. number-1 oder number/2 gehen auch. sqrt ist nur schneller.
fast so schnell wie sqrt
for (i = 3; i <= sqrt (number); i += 2)
ist übrigens
for (i = 3; i*i <= number; i += 2)
-
brandi schrieb:
Ja hmm so schön dass auch aussieht, nur in c1 glaub ich nicht dass ich
#define und sqrt verwenden kann.es soll sehr einfach sein das programm.
Also kann mir einer sagen was momentan noch falsch ist in meinen einfachen c1 programm?Hat C1 keine Wurzelfunktion? Schreib doch eine selber, nach dem Heronverfahren z.B.
Gibts nen Link zur C1 Doku?