Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » Primgolf

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 ] [ 4 ] > 5 < [ 6 ] [ 7 ] [ 8 ]
040
27.01.2007, 22:03 Uhr
0xdeadbeef
Gott
(Operator)


Und um noch einen draufzusetzen:

C++:
#include <iostream>

template<unsigned x, unsigned i, unsigned j, bool abort>
struct prime_aux {
  static bool const val
    = x % i != 0 &&
      prime_aux<x, i + j, 6 - j, (i * i > x || x % i == 0)>::val;
};

template<unsigned x, unsigned i, unsigned j> struct prime_aux<x, i, j, true> {
  static bool const val = true;
};

template<unsigned x> struct is_prime {
  static bool const val
    = x % 2 != 0 &&
      x % 3 != 0 &&
      prime_aux<x, 5, 2, x % 2 == 0 || x % 3 == 0>::val;
};

template<> struct is_prime<0> { static bool const val = false; };
template<> struct is_prime<1> { static bool const val = false; };
template<> struct is_prime<2> { static bool const val =  true; };
template<> struct is_prime<3> { static bool const val =  true; };
template<> struct is_prime<4> { static bool const val = false; };
template<> struct is_prime<5> { static bool const val =  true; };

template<unsigned x, unsigned next_step, bool found> struct prime_finder {
  static unsigned const val
    = prime_finder<x + next_step, 6 - next_step, is_prime<x + next_step>::val>::val;
};

template<unsigned x, unsigned next_step> struct prime_finder<x, next_step, true> {
  static unsigned const val = x;
};

template<unsigned i> struct primes {
  static unsigned const next_step = 6 - primes<i - 1>::next_step;
  static unsigned const val = prime_finder<primes<i - 1>::val,
                                           next_step,
                                           false>::val;
};

template<> struct primes<0> { static unsigned const val = 2; };
template<> struct primes<1> { static unsigned const val = 3; };
template<> struct primes<2> {
  static unsigned const next_step = 2;
  static unsigned const val = 5;
};

template<int i> struct primes_loop {
  static inline void run() {
    primes_loop<i - 1>::run();
    std::cout << primes<i>::val << ' ';
  }
};

template<> struct primes_loop<-1> {
  static inline void run() { }
};

int main() {
  primes_loop<100>::run();
  std::cout << std::endl;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 27.01.2007 um 22:09 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
041
27.01.2007, 22:09 Uhr
tobias
hmm....


xd also geht es ja doch nicht um den möglichst kurzen code....

na dann... ich weiß wie ichs machen muss allerdings habe ich gerade noch paar denkfehler...
--
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
042
27.01.2007, 22:22 Uhr
0xdeadbeef
Gott
(Operator)


Naja - subaesel sagte was von schnell. Laufzeittechnisch dürfte das da kaum zu schlagen sein.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
043
27.01.2007, 22:59 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat von 0xdeadbeef:
Naja - subaesel sagte was von schnell. Laufzeittechnisch dürfte das da kaum zu schlagen sein.

Der rechnet ja schon zur compilezeit das alles aus im endeffekt
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
044
27.01.2007, 23:20 Uhr
tobias
hmm....


na jetzt will ich nochmal...

meiner ist viel kürzer...


C++:
#include <iostream>
#include <cmath>
using namespace std;

int main(void)
{
    int zahl;
    cout << "Bitte Zahl eingeben: " << flush;
    cin >> zahl;
    int gerundet = (int)(sqrt(zahl) + 0.5);
    bool is_prime = false;
    
    if (zahl == 2 || zahl == 3 || zahl == 5 || zahl == 7)
    {
        is_prime = true;
    }
    else
    {
        for (int i = 1; i < gerundet; i++)
        {
            if (zahl%i == 0)
            {
                is_prime = false;
                break;
            }
            else
            {
                is_prime = true;
                break;
            }
        }
    }
    
    cout << '\n' << endl;
    
    if (is_prime)
    {
        cout << "Ihre Zahl: " << zahl << " ist eine Primzahl\a\a\a" << endl;
    }
    else
    {
        cout << "Ihre Zahl: " << zahl << " ist keine Primzahl" << endl;
    }
    
    cout << '\n' << endl;
    
    system("PAUSE");
    return 0;
}



--
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
045
27.01.2007, 23:26 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von tobias:
na jetzt will ich nochmal...

meiner ist viel kürzer...


auf der allerersten seite steht schon eine sehr viel kürzere Lösung...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
046
27.01.2007, 23:41 Uhr
tobias
hmm....


du musst bedenken das ich das so geschrieben habe das man es gleich in den compiler schmeisen kann... ich könnte es auch so abgeben:


C++:
if (zahl == 2 || zahl == 3 || zahl == 5 || zahl == 7)
    {
        is_prime = true;
    }
    else
    {
        for (int i = 1; i < gerundet; i++)
        {
            if (zahl%i == 0)
            {
                is_prime = false;
                break;
            }
            else
            {
                is_prime = true;
                break;
            }
        }
    }



der rest ist ja nur die auswertung.. hab halt gleich nen ganzes konsolenprogramm geschrieben.

meine methode ist eine kleine erneuerung des: sieb des erasthors...
nur ich muss es noch ein wenig testen... denke das da bestimmt noch ein bug drinne ist
--
Danke

Dieser Post wurde am 27.01.2007 um 23:43 Uhr von tobias editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
047
27.01.2007, 23:41 Uhr
0xdeadbeef
Gott
(Operator)


...noch dazu funktioniert es nicht. Das Ding behauptet von jeder Zahl außer 2, 3, 5 und 7, dass es keine Primzahl sei, weil im ersten Schleifendurchlauf x%i mit i == 1 immer 0 ergibt. Wenns um kurz geht,

C++:
bool isprime(unsigned x) {
  int i=x;while(--i&&x%i);return!--i;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 27.01.2007 um 23:44 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
048
27.01.2007, 23:45 Uhr
tobias
hmm....


xd hatte ich übersehen.. habs ja gleich immer getestet und beim posten vergessen wieder rückzustellen..

die alte forschleife mit: for (int i = 2; i < gerundet; i++)

ersetzen... dann sollte es eigentlich funktionieren.

ja hab noch ein bug gefunden: 404495 ist keine primzahl wird aber als eine erkannt. ich weiß nicht wo ich immer den denkfehler mache aber irgendwo ist da immer der wurm.
--
Danke

Dieser Post wurde am 27.01.2007 um 23:48 Uhr von tobias editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
049
27.01.2007, 23:48 Uhr
0xdeadbeef
Gott
(Operator)


Auch dann nicht, fütter dem Ding mal ne 9.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] [ 3 ] [ 4 ] > 5 < [ 6 ] [ 7 ] [ 8 ]     [ Rätselecke ]  


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: