L'impression des nombres premiers en Java en utilisant la récursivité

J'ai écrit une fonction similaire dans C, et a été en mesure d'atteindre le résultat requis contrairement à java.
Ci-dessous le code qui vérifie si un nombre est premier de manière récursive.
Compilation dit, je suis absent de l'instruction return.
Le nombre à vérifier si une prime est x. La variable i est le diviseur.(ie) x/2, (x/2)-1,...0.

public int primes(int x, int i)
{
    if(i==0)
        return 1;
    if(x%i==0)
        return 0;
    else
        primes(x, i-1);
}

Quelle est la complexité de ce code si je devais imprimer les 1000 premiers nombres premiers.

  • Pour la complexité, dans le pire des cas i diminue jusqu'à 0, donc si i commence à x/2, c'est environ O(x). Mais ce sera amorti à quelque chose de beaucoup plus petit car de toute évidence pas chaque nombre est premier (en.wikipedia.org/wiki/Prime_number_theorem). Pour un simple 1000 nombres premiers, je doute qu'il va prendre très longtemps de toute façon.
  • non, il ne sera pas amortir à rien de plus petit parce que le test est fait dans le mauvais ordre. n=1000 premiers moyens ~ N=8000 numéros de tester, par un O(N^2) algorithme; n'en soyez pas si sûr qu'il va courir vite tout simplement parce que n=1000 semble petit (vous l'avez bien dit "de toute façon"...) - sa complexité est atroce (voir, par exemple, cette Haskell entrée de test avec l'équivalent de l'algorithme montrant ~ N^2.2 , ~ n^2.5 comportement.
  • J'ai eu des OP primes est O(x) (ou O(n) ou quoi que ce soit). Alors bien sûr, si il boucle c'est O(n^2), mais il ne va pas prendre l'absolu pire des cas en raison de l'OP a déclaré qu'il commence i à x/2, donc evens échoue immédiatement. Alors à trouver les 1000 premiers x juste besoin d'être 7919, de sorte que les nombres premiers n'est pas récursif très loin pour la plupart des numéros.
  • ils ne parlent agit de trouver des 1000 premiers nombres premiers. et je vous ai donné la preuve que c'est pire que N^2.
  • le empiriques commandes de croissance de votre algorithme est ~ n^2.5, n en produit de nombres premiers.
InformationsquelleAutor Farveaz | 2014-07-22