Primärzahl



  • Als Rat: Kaufe dir ein gutes Buch und vergiss den Unikurs. 🙂



  • kannst es auch mit dem beispiel versuchen, wo man die primzahlen bis hundert ausgibt ...

    for( nCount = 1; nCount < 100; nCount += 2 )
    {
    	bIsPrim = 1;
    	for( nDiv = 2; nDiv <= nCount / 2; nDiv+=2 )
    	{
    		if( nDiv == 4 )
    			nDiv--;
    		if( nCount % nDiv == 0 )
    		{
    			bIsPrim = 0;
    			break;
    		}
    	}
    	if( bIsPrim == 1 )
    		printf( "%2d ist eine Primzahl\n", nCount );
    

    soo long zai



  • zaiborg schrieb:

    for( nDiv = 2; nDiv <= nCount / 2; nDiv+=2 )
    

    Y U NO STOP AT SQRT(nCount) ???



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • //edit: 1 vergessen... ^^

    bool isprim(unsigned val)
    {
      assert(val != 0);
    
      if(val == 1)
        return false;
      if(val < 4)
        return true;
      if(val%2 == 0)
        return false;
    
      for(unsigned i = 3; i < val; i += 2)
      {
        if(val%i == 0)
          return false;
        if(val/i < 2)
          break;
      }
    
      return true;
    }
    
    #include <iostream>
    
    int main()
    {
      for(unsigned in; std::cin >> in;)
      {
        if(isprim(in))
          std::cout << "Primzahl\n";
        else
          std::cout << "keine Primzahl\n";
      }
    }
    

    bb



  • #include <iostream>
    #include <vector>
    
    bool is_prime(unsigned n)
    {
            if(n < 2)
                    return false;
    
            if(n == 2 || n == 3)
                    return true;
    
            if(n % 2 == 0 || n % 3 == 0)
                    return false;
    
            for(unsigned i = 5, delta = 2; i * i <= n; i += delta, delta = 6 - delta)
                    if(n % i == 0)
                            return false;
    
            return true;
    }
    
    template <typename T, typename A>
    std::ostream& operator << (std::ostream& os, std::vector<T, A> const& v)
    {
            os << '[';
    
            if(v.empty())
                    return os << ']';
    
            os << v.front();
    
            for(auto iter = ++v.begin(); iter != v.end(); ++iter)
                    os << ',' << *iter;
    
            return os << ']';
    }
    
    int main()
    {
            unsigned const bounds[] = { 0, 150 };
            std::vector<int> primes;
    
            for(unsigned i = bounds[0]; i <= bounds[1]; ++i)
                    if(is_prime(i))
                            primes.push_back(i);
    
            std::cout << primes;
    }
    

    Im Prinzip ähnlich der Version von unskilled, außer dass nicht nur Vielfache von 2, sondern direkt Vielfache von 2 und 3 überprungen werden. (Auf i wird abwechselt 2 und 4 addiert.)

    http://ideone.com/Mmje2

    Und weil ich gerade Langeweile hab, hier nochmal das ganze in Haskell. ❤

    isPrimeImpl n i delta
            | i * i > n      = True
            | n `mod` i == 0 = False
            | otherwise      = isPrimeImpl n (i + delta) (6 - delta)
    
    isPrime n
            | n < 2                            = False
            | n `elem` [2, 3]                  = True
            | n `mod` 2 == 0 || n `mod` 3 == 0 = False
            | otherwise                        = isPrimeImpl n 5 2
    
    main = print $ filter isPrime [1 .. 150]
    

    http://ideone.com/Bs60a



  • Nicht weil du Langeweile hast. Weil du allen zeigen willst, wie toll du in Haskell h4xX0rn kannst 🙂



  • Haskell ist halt sexy.



  • ...und bis auf die tatsache, dass bei mir 1 ne primzahl ist, weil ich nen trottel bin 😃



  • Der Tip nach
    prime numbers filetype:cpp
    zu googeln wäre wahrscheinlich für den OP viel hilfreicher als so einiges anderes was hier geantwortet wurde.

    Die üblichen Verdächtigen eben. Seufz.


Anmelden zum Antworten