Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wyznaczanie ilości dzielników

Ostatnio zmodyfikowano 2014-11-12 10:56
Autor Wiadomość
Hipochondryk
» 2014-10-30 15:34:48
Łatwo zauważyc że liczbę wykonań tej pętli możemy ograniczyć o 50%.

  for(j=1; j<=liczba_we/2; j++) //petla potrzebna do wylapania wszystkich dzielnikow, idziemy od 1, bo przez 0 nie mozna
        {                                    //dzielic, do tab_liczb/2, bo nie ma potrzeby isc do konca liczby, tzn:
            if(liczba_we%j==0)       //majac liczbe 18, nie znajdziemy dzielnika wiekszego od 9, oprocz 18, ten przypadek
            {                               //zostal uwzgledniony.
                licznik++; //zliczanie dzielnikow
            }
        }
Weźmy pod uwagę że, żadna liczba parzysta nie ma nieparzystego dzielnika (oprócz 1) oraz, że żadna liczba nieparzysta nie ma parzystego dzielnika.

Czyli można by tą pętle napisać tak :

if(liczba_we%2)
{
for(j=2;j<=liczba_we/2;j+=2)
    if(!liczba_we%j)
      licznik++;
}
else
{
for(j=i;j<=liczba_we/2;j+=2)
    if(!liczba_we%j)
      licznik++;
}

(pseudokod, nie musi się kompilować)
P-119687
Tomek_z_W11
» 2014-11-12 00:02:58
12/3. No a w drugiej kwestii masz racje :)


Już wiem co było źle. Podczas wrzucania odpowiedzi na forum, dzieje sie coś takiego, że kasuje tekst pomiędzy nawiasami kwadratowymi, jeżeli jest tam jeden znak, czyli w momencie gdy pisałem [ i ], tylko, że bez spacji w środku, to ten tekst po prostu znikał, nie dziwie sie zatem, że nie przechodziło. Do tego, z tego co widze, to ten tekst czasami znika, a czasami nie :D

#include<iostream>

using namespace std;

int main()
{
    int i, j, licznik=0; //do petli, do zliczania dzielnikow

    int liczba_we;
    int tablica_licznikow[60002];

    for(i=0; i<60002; i++) //petla idaca po wszystkich komorkach tablicy (od zera ro rozmiaru tablicy)
    {
        cin >> liczba_we;

        if(liczba_we==0) //jezeli dostaniemy na wejscie 0, to przerywamy petle i zapamietujemy ilosc wprowadzonych liczb
        {                       //zmienna 'i' bedzie to przechowywac;
            break;
        }
        for(j=1; j<=liczba_we/2; j++) //petla potrzebna do wylapania wszystkich dzielnikow, idziemy od 1, bo przez 0 nie mozna
        {                                    //dzielic, do tab_liczb/2, bo nie ma potrzeby isc do konca liczby, tzn:
            if(liczba_we%j==0)       //majac liczbe 18, nie znajdziemy dzielnika wiekszego od 9, oprocz 18, ten przypadek
            {                               //zostal uwzgledniony.
                licznik++; //zliczanie dzielnikow
            }
        }
        licznik++; //uwzglednienie przypadku, ze kazda liczba jest podzielna przez sama siebie

        tablica_licznikow[ i ]=licznik; //zapamietanie licznikow !!!!TUTAJ DODAŁEM [ i ] ZE SPACJAMI W NAWIASACH!!!!
        licznik=0;
    }

    for(j=0; j<i; j++) //wyswietlamy liczniki(podzielniki) w odpowiedniej kolejnosci.
    {
        cout << tablica_licznikow[ j ] << endl;
    }

return 0;
}
P-120408
michal11
» 2014-11-12 00:25:57
Jak byś dodawał kod w znaczniki to nic by ci nie znikało.
P-120414
Tomek_z_W11
» 2014-11-12 10:56:38
Chętnie, a jak się to robi?
P-120420
1 2 « 3 »
Poprzednia strona Strona 3 z 3