Visualizzazione risultati 1 fino 8 di 8

Discussione: [php] errore divison by 0

  1. #1
    Guest

    Predefinito [php] errore divison by 0

    Ciao,
    ho fatto questo codice per salvare i numeri primi (secondo il crivello di eratostene) in un array, nn capisco perché mi da error divison by 0, mi potete controllare? grazie:
    Codice PHP:
    $numeri_primi = array();
    $numeri_primi[0] = 2;

    $c = 0;

    for (
    $i = 3; $i <= 100; $i++) {

    if (
    $i%$numeri_primi[$c] > 0) {
    $numeri_primi[$c] = $i;
    $c++;
    }

    }

  2. #2
    Guest

    Predefinito

    E' logicamente sbagliato, devi controllare con tutti i numeri primi che hai e non con uno solo (come fai ora).
    Codice PHP:
    <?php
    $numeri_primi
    = array();
    $numeri_primi[0] = 2;

    $flag = false;

    for(
    $i = 3;$i<=100;$i++) {
    $flag = false;
    for(
    $j = 0;$j<count($numeri_primi);$j++) {
    if(!(
    $i%$numeri_primi[$j])) {
    $flag = true;
    break;
    }
    }
    if(!
    $flag) $numeri_primi[] = $i;
    }
    print_r($numeri_primi);
    ?>

  3. #3
    Guest

    Predefinito

    quindi come faccio ad usare il risultato come array normale? cioe come stampare $array[0] ???
    poi i spieghi che fa $flag??? grazie..

    EDIT: cioè devo scegliere unn numero rand() tra i numeri che vengono a formarsi, su quale array posso farl?
    Ultima modifica di bluster : 17-02-2009 alle ore 19.22.33

  4. #4
    Guest

    Predefinito

    $flag indica se il numero su cui itera è divisibile o no per un altro, se lo è non è primo, altrimenti si.

    Per la seconda richiesta usi array rand

  5. #5
    Guest

    Predefinito

    perché array_rand($numeri_primi); mi ritorna anche numeri nn primi e che nn sono presenti nell'array???
    nn capisco...grazie dell'aiutoo...ciaoo!

    EDIT: penso di aver risolto così: $numeri_primi[rand(0,count($numeri_primi)-1)];
    cmq se avete idee migliori sono ben accettate... grazie...ciaoo!

    EDIT Scusate, volevo editare, mi sono accorto molto tardi...
    Ultima modifica di debug : 18-02-2009 alle ore 01.47.22

  6. #6
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Dovrebbe rispettare le caratteristiche del crivello di erastotene

    Codice PHP:
    <?php

    $quanti
    = 50;
    $numeri = array();

    for(
    $i=2;$i<=($quanti+2);$i++){
    if(
    $i==$quanti)
    $numeri[$i][0] = "fine";
    else
    $numeri[$i][0] = $i;
    }
    $num_elem = count($numeri);
    $i=2;
    while(
    $i<$num_elem && ($i*$i) < $quanti){
    echo
    $i*$i."<".$quanti."<br>";
    if(
    $numeri[$i][0]!="fine"){
    $n=$numeri[$i][0];
    $j=2;

    while(
    $j<$num_elem){
    if((
    $numeri[$j][0] > 0) && ($n != $j) && ($numeri[$j][1] != "multiplo") && ($j% $n) == 0){
    echo
    $j."/".$n."<br>";
    $numeri[$j][1] = "multiplo";
    }
    $j++;
    }
    }
    $i++;

    }


    for(
    $i=2;$i<$num_elem;$i++)
    echo
    $numeri[$i][0]."=".$numeri[$i][1]."<br>";

    $i=0;
    $j=0;
    while(
    $numeri[$j][0] != "fine"){
    if(
    $numeri[$j][1] != "multiplo"){
    $numeri_primi[$i]=$numeri[$j][0];
    $i++;
    }
    $j++;
    }

    $num_elem = count($numeri_primi);
    for(
    $i=2;$i<$num_elem;$i++) echo ",".$numeri_primi[$i];
    echo
    ".";
    ?>
    Ultima modifica di Xsescott : 18-02-2009 alle ore 05.19.46
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  7. #7
    Guest

    Predefinito

    mi sembra tu stia complicando le cose, i risultati che ottengo sono giusti:
    Codice PHP:
    function Numero_Primo () {

    $numeri_primi = array();
    $numeri_primi[0] = 2;

    $flag = false;

    for(
    $i = 3; $i <= 100; $i++) {

    $flag = false;
    for(
    $j = 0; $j < count($numeri_primi); $j++) {

    if(!(
    $i%$numeri_primi[$j])) {
    $flag = true;
    break;
    }

    }

    if(!
    $flag) $numeri_primi[] = $i;

    }

    return
    $numeri_primi[rand(0,count($numeri_primi)-1)];

    }

    do {

    $p = Numero_Primo();
    $q = Numero_Primo();

    } while (
    $p == $q);

    echo
    $p.' '.$q;

  8. #8
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Citazione Originalmente inviato da bluster Visualizza messaggio
    mi sembra tu stia complicando le cose, i risultati che ottengo sono giusti:
    Codice PHP:
    function Numero_Primo () {

    $numeri_primi = array();
    $numeri_primi[0] = 2;

    $flag = false;

    for(
    $i = 3; $i <= 100; $i++) {

    $flag = false;
    for(
    $j = 0; $j < count($numeri_primi); $j++) {

    if(!(
    $i%$numeri_primi[$j])) {
    $flag = true;
    break;
    }

    }

    if(!
    $flag) $numeri_primi[] = $i;

    }

    return
    $numeri_primi[rand(0,count($numeri_primi)-1)];

    }

    do {

    $p = Numero_Primo();
    $q = Numero_Primo();

    } while (
    $p == $q);

    echo
    $p.' '.$q;
    Quello che volevi tu allora era diverso:
    "Il procedimento è il seguente: si scrivono tutti i naturali a partire da 2 fino n in un elenco detto setaccio (in programmazione spesso l'elenco è implementato da un array). Poi si cancellano (setacciano) tutti i multipli del primo numero del setaccio (escluso lui stesso). Si prosegue così fino ad arrivare in fondo. I numeri che restano sono i numeri primi minori od uguali a n. È come se si utilizzassero dei setacci a maglie via via più larghe: il primo lascia passare solo i multipli di 2, il secondo solo i multipli di 3, e così via."

    fonte:http://it.wikipedia.org/wiki/Crivello_di_Eratostene

    io per comodità ho usato un array multidimensionale e poi ho copiato tutto in un'altro array, ma la cosa si può ottimizzare tranquillamente come da wiki.
    Saluti.
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •