Keresés


Toplista

Toplista
  • betöltés...

Magántanár kereső

Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!

Informatika 9.osztály C++, primtényezőkre bontással meghatározni az osztók számát

108
A feladat az volt, hogy határozzuk meg egy szám osztóinak a számát a prímtényezőkre bontásos algoritmus segítségével, amit az órán leadott a tanárnő
Az órán felvett algoritmus, amivel prímtényezőkre lehet bontani:
#include <iostream>

using namespace std;

int main()
{
int a;
cout<<"a=";
cin>>a;
int db;
int k;
db=0;
while(a%2==0)
{
db=db+1;
a=(a/2);
}
if(db!=0)
{
cout<<"2^"<<db<<endl;
}
k=3;
while(a>1)
{
db=0;

while(a%k==0)
{
db=db+1;
a=(a/k);
}
if(db>0)
{
cout<<k<<"^"<<db<<endl;
}
k=k+2;
}
return 0;
}



Az az algoritmus, amivel meg kellene határozni az osztók számát.
#include <iostream>

using namespace std;

int main()
{
int a;
cout<<"a=";
cin>>a;
int db;
int k;
db=0;
while(a%2==0)
{
db=db+1;
a=(a/2);
}
if(db!=0)
{
cout<<"2^"<<db<<endl;
}
k=3;
while(a>1)
{
db=0;

while(a%k==0)
{
db=db+1;
a=(a/k);
}
if(db>0)
{
cout<<k<<"^"<<db<<endl;
}
k=k+2;
}
return 0;
}

A program működik páros számokra, de nem működik prímszámokra és páratlan egészekre sem. Ha valaki tudja mi lehet a hiba azt nagyon szépen megköszönöm!
Jelenleg 1 felhasználó nézi ezt a kérdést.
informatika, c++, primtenyezokre, Bontás
0
Középiskola / Informatika

Válaszok

2
(Az nem válasz hanem hozzászólás a kérdéshez.)

A kérdésben 2 program forráskódját közölted és a 2 betűre megegyezik. Szóval nem világos mivel próbálkozol. Esetleg azzal, hogy összeszámold a prím osztók lehetséges kombinációit?
1

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

int main()
{
    vector<int> oszto;

    int a;
    cout << "a=";
    cin >> a;

    int db;
    int k;

    db = 0;
    while (a % 2 == 0) {
        db = db + 1;
        a = (a / 2);

        oszto.push_back(pow(2, db));
        for (int i = 0, l = oszto.size(), szorzo = oszto.back(); i < l; i++) {
            if (oszto[i] == 2) {
                break;
            }
            oszto.push_back(oszto[i] * szorzo);
        }
    }
    if (db != 0) {
        cout << "2^" << db << endl;
    }

    k = 3;
    while (a > 1) {
        db = 0;

        while (a % k == 0) {
            db = db + 1;
            a = (a / k);

            oszto.push_back(pow(k, db));
            for (int i = 0, l = oszto.size(), szorzo = oszto.back(); i < l; i++) {
                if (oszto[i] == k) {
                    break;
                }
                oszto.push_back(oszto[i] * szorzo);
            }
        }
        if (db > 0) {
            cout << k << "^" << db << endl;
        }
        k = k + 2;
    }

    cout << oszto.size() << " osztó:";
    for (int i = 0; i < oszto.size(); i++) {
        cout << " " << oszto[i];
    }
    cout << endl;

    return 0;
}
0