Primärzahl



  • Naja, eigentlich musst du z.B. std::cin schreiben. Du benutzt cin aus dem Namensraum std . Mit using gibst du den Namensraum direkt an und kannst das std:: vor cin weglassen. Bei dir klappt es auch ohne, da du iostream.h einbindest, wobei das sehr veraltet ist. Wenn du das aus einem Buch oder so hast, kaufe dir ein neues!



  • ich hab das jetzt so gemacht

    #include <iostream.h>
    void main()
    {
      int n;
      cin >> n;
    
      int teiler = 0;
      for (int k = 2; k <= n; k++)
      {
        if (n%k == 0)
           teiler++;
      }
    
      if (teiler > 1)
        cout << "Keine Primzahl!";
      else
        cout << "Primzahl!";
    }
    

    und wegen iostream.h
    ich habe das nicht aus dem buch sondern lerne das auf der uni. studiere Physik und haben als nebenfach noch informatik.
    kenne das programmieren erst seit 2 monaten.

    nochmal vielen dank an alle für eure schnellen und sehr guten antworten 🙂



  • 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