Sveiki, norėjau paprašyti pagalbos: nuo ko reiktų pradėti spręsti šį uždavinį, nes niekas nešauna į galvą: “Sukurkite programą, kuri nurodytą skaičių “n“ išreikštų pirminių daugiklių sandauga ir pirminius daugiklius išdėstytų nemažėjančiai.“ Dėkui iš anksto.
Duoti duomenys: - “n“ = 30
Atsakymas: 2 * 3 * 5
purexlt +225
Sveikas. Siūlau pradėti nuo ljmm http://www.mif.vu.lt/ljmm/kursc/pirm/pirmuzd.html temos apie skaičių dalumą, aktualiausia ta lentelė ir kaip išskaidomi skaičiai. Na, o programos algoritmas būtų paprastas. Suki pagrindinį ciklą, while(n>1), susikuri kintamąji d=2 ("daliklis", pirmasis pirminis skaičius yra 2) ir tikrini, ar n%d==0. Jei true, tai n=n/d. Priešingu atveju d reikšmę didini vientu, be to, reiks atsižvelgti ar d gausis pirminis skaičius. Tai tiek ;)
frontier psychiatrist +4
Išmąsčiau tik tiek, o kaip reiktų kintamajam “VSum11“ priskirti 2 * 5 * 3, nes “VNum11“ * “VNum11“ * “VNum11“ neišeis. Kiekvieną kartą keisis. O hardcode'inti tris kintamuosius nėra itin gera mintis, kadangi paėmus didesnį skaičių nei 30, programa neveiktų. P. S. Masyvų naudoti neleidžiama. int VNumber11 = 30; int VSum11 = 0; int VNum11 = 2; while (VSum11 != VNumber11) { if (VNumber11 % VNum11 == 0) { // ??? } VNum11++; }
pakeista prieš 7 m
purexlt +225
Susidaro įspūdis, kad mano pranešimų nieks neskaito :/ Sudėtingumas O(n). #include <iostream> using namespace std;
int main() { int n, d = 2; // pradinis skaicius; daliklis cin >>n; while(n>1){ if(n%d==0){ cout << d << " "; n=n/d; } else d++; } return 0; }
pakeista prieš 7 m
frontier psychiatrist +4
Skaičiau, bet truputį permąsčiau. Dėkui.
valdas3 +1276
Nelabai ką tai bendro turi su uždaviniu, bet algoritmo sudėtingumas yra ne tiesinis, o eksponentinis :) https://en.wikipedia.org/wiki/Trial_division#Speed