Wyznaczanie ilości dzielników
Ostatnio zmodyfikowano 2014-11-12 10:56
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ć) |
|
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; } |
|
michal11 |
» 2014-11-12 00:25:57 Jak byś dodawał kod w znaczniki to nic by ci nie znikało. |
|
Tomek_z_W11 |
» 2014-11-12 10:56:38 Chętnie, a jak się to robi? |
|
1 2 « 3 » |