eMatematikas Prisijunk Forumas VBE užduotys ONLINE testai

Algoritmas išreiškiantis pirminius daugiklius.


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

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 ;)

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

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

Skaičiau, bet truputį permąsčiau. Dėkui.

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

Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »