Utilizarea metodei IsPrime în Java [închis] (Programare, Java)

Harshit Singh a intrebat.

Acesta este codul meu pentru a utiliza metoda IsPrime pentru a determina numărul total de prime între 0 și 1000 și pentru a imprima numărul total de prime în cele din urmă. Poate cineva să spună ce este în neregulă cu codul.

public static void main(String[] args) {
    int z=0; 
    // z is the variable that holds total number of primes
    //n is divisor
    //i is dividend

    if (isPrime(i)) {
        z++;
    }
    System.out.print(z+"
");
}

public static boolean isPrime(int n){
             { 
    for(i=0; i<1000; i++)
    {
        for(n=0; n<i; n++)
            if(i%n==0) 
                return false;
            else 
                return true;
        }
    }
}

Mulțumesc în avans

Comentarii

  • Prima problemă este (lipsa de) formatare consistentă… Mă opresc din citit când întâlnesc așa ceva. –  > Por user2864740.
  • Am editat-o. Aștept să fie aprobat. –  > Por sparkhee93.
  • Încearcă să organizezi și să formatezi mai bine codul -.  > Por Abdelhak.
  • Vă rugăm să descrieți problema pe care o aveți cu acest cod. Nu este un joc de ghicit –  > Por Erwin Bolwidt.
  • Logica scrisă în isPrime(int n) este greșită. –  > Por Naveen Bathina.
5 răspunsuri
sparkheee93

Formatarea ar putea să te ajute să descoperi eroarea.

Văd câteva lucruri care nu sunt în regulă cu codul tău:

  1. Din câte văd, ai o paranteză deschisă în plus în isPrime metoda.
  2. i nu este declarat în metoda ta principală.
  3. Trebuie să înfășurați if(isPrime(i)) în interiorul unei bucle for care să meargă de la 0 la 1000. Cum ar fi următoarea:

    for (int i = 0; i <= 1000; i++) {
        if (isPrime(i))
            z++;
    }
    

    În acest fel, va verifica de fapt toate numerele prime de la 0 la 1000.

  4. Pentru bunele practici de codare, aș numi declarația dvs. z să fie ceva de genul counter astfel încât să fie clar ce trebuie să facă acea variabilă. i în bucla for este în regulă, deoarece este o modalitate obișnuită de a indexa prin buclă.
  5. De asemenea, puteți utiliza mai multe tactici pentru a vă optimiza codul. Puteți utiliza Math.sqrt() funcția for, precum și să începeți bucla for de la 3 și să urcați cu un increment de 2 (deoarece orice număr par va fi divizibil cu 2) și să inițializați contorul de la 1, deoarece 2 va fi deja un număr prim.

Naveen Bathina
public static boolean isPrime(int n){
    int factors = 0;
    for(int i = 1; i <= n; i++){
        if(n % i == 0) // ensure that you mod n not i
        factors++;
     }
    // if factors count is equals to 2 then it is prime number else it's not prime number
    if(factors == 2)
        return true;
    else
        return false;
}

Verificați o dată acest cod modificat pentru referință.

LuvnJesus

Cred că ai întors câteva lucruri pe dos.

De ce să nu faci o buclă de la 1 la 1000 în funcția ta primară și apoi să folosești funcția isPrime pentru a determina dacă fiecare număr este prim.

În funcția isPrime, numărați de la 2 la 1/2 din valoarea numărului și faceți diviziunile pentru a determina dacă este prim. Întoarceți False dacă este divizibil.

public static void main(String[] args) {
  int z=0; 
  for (i=1;i<=1000;i++) {
       if (isPrime(i))
       {
           z++;
       }
    }
    System.out.print(z+"
");
}
public static boolean isPrime(int n){
        for(i=2; i<=n/2; i++)
        {
           if(n%i==0) return false;
        }
        return true;
}

Comentarii

  • Trebuie să declarați i pentru ca isPrime să se compileze. Și susține că 4 este un număr prim. –  > Por cdlane.
  • Ar trebui să iterați de la 2 la sqrt(n)+1 în isPrime() bucla internă. –  > Por mbaitoff.
  • Ai dreptate … ar fi trebuit să aibă i<=n/2. Nu am declarat i … mă grăbeam. –  > Por LuvnJesus.
  • mbaitoff … da, sqrt ar fi mai rapid, nu-i așa. –  > Por LuvnJesus.
  • Ar trebui să iterați de la 3 prin cote până la sqrt(n) – tratați orice lucru mai mic de 3 ca un caz special. –  > Por cdlane.
John Ephraim Tugado

Acest lucru va număra numărul de numere prime pe baza acestui lucru link și răspunsul tău inițial…

public static void main(String[] args) {
    int isPrimeCount = 0;

    for(i=0; i<1000; i++)
    {
        if(Check_Prime(i))
        {
          isPrimeCount++;
        }
        System.out.println(isPrimeCount);
    }
}

private static boolean Check_Prime(int number) {
    int i;
    for (i = 2; i <= number - 1; i++)
    {
        if (number % i == 0)
        {
           return false;
        }
    }
    if (i == number)
    {
        return true;
    }
    return false;
}    

Comentarii

  • foarte frumos copy paste XD –  > Por Faraz.
  • Întrebarea este „Poate cineva să spună ce este în neregulă cu codul.”. Nu este „Dați-mi o bucată de cod fără nicio legătură care face același lucru, dar care nu mă învață nimic” – -.  > Por Erwin Bolwidt.
Dave

Trebuie să definiți variabila „i” înainte de a o trece la metoda isPrime() din main(). Se pare că cel care a scris codul nu a înțeles pe deplin ce este un număr prim. Conform wikipedia „Un număr prim (sau un prim) este un număr natural mai mare decât 1 care nu are alți divizori pozitivi decât 1 și el însuși. ” Având în vedere acest lucru, trebuie să vă asigurați că valoarea pe care o treceți în metoda isPrime() este mai mare decât 1. După ce m-am uitat la codul dvs. am făcut câteva modificări. Am făcut ca metoda isPrime() să returneze false dacă valoarea de intrare este <=1. De asemenea, am făcut ca metoda isPrime() să returneze true dacă valoarea de intrare este 2. Am făcut și alte modificări în cod care să facă ca instrucțiunea for să funcționeze de n-1 ori, deoarece este tot ce este necesar pentru a afla dacă numărul este prim, deoarece toate numerele sunt divizibile prin ele însele. De asemenea, instrucțiunea for începe de la valoarea 2. Instrucțiunile de returnare if-then-else din cadrul buclei for sunt ilogice, deoarece vor returna o valoare fără a parcurge întreaga buclă. Nu ați avut nevoie de bucla for interioară.
Iată un link despre numerele prime

Iată noul cod:

public class AreaComparison {

    /**
     * Starts the program.
     *
     * @param command line arguments
     */

    public static void main(String[] args) {
        int z = 0;
        int i = 2;
    // z is the variable that holds total number of primes
        //n is divisor
        //i is dividend

        if (isPrime(i)) {
            z++;
        }
        System.out.print(z + "
");
    }

    public static boolean isPrime(int n) {
        if (n <= 1) {
            return false;
        }
        if(n == 2){
            return true;
        }

        for (int i = 2; i < n; i++) {

            if (n % i == 0) {
                return false;
            }

        }
        return true;
    }

}

Comentarii

  • Acesta are o mică greșeală, în interiorul buclei ar trebui să fie return false, iar ultima întoarcere ar trebui să fie true. –  > Por Wael.

Tags: