C++ :: Aufgabe #345
1 Lösung
Primfaktorzerlegung und Potenzschreibweise
Fortgeschrittener - C++
von JKooP
- 03.04.2021 um 09:53 Uhr
1. Schreibe eine Methode/Funktion, die jede Integer- Zahl in ihre Primfaktoren zerlegen kann
und das Ergebnis als Array/Liste zurückgibt.
Beispiel:
24 = 2*2*2*3
Lösung:
a = { 2, 2, 2, 3 }
2. Schreibe eine weitere Methode/Funktion, die die Werte des Arrays aus Aufgabe 1
in Potenzschreibweise überführt und auf dem Bildschirm ausgibt.
Das Zeichen zur Darstellung kann je nach Vorliebe/Programmiersprache variieren (^, **, h, ...).
Lösung:
2*2*2 = 2^3
3 = 3^1
Ausgabe:
2^3 * 3^1
Viel Spaß
und das Ergebnis als Array/Liste zurückgibt.
Beispiel:
24 = 2*2*2*3
Lösung:
a = { 2, 2, 2, 3 }
2. Schreibe eine weitere Methode/Funktion, die die Werte des Arrays aus Aufgabe 1
in Potenzschreibweise überführt und auf dem Bildschirm ausgibt.
Das Zeichen zur Darstellung kann je nach Vorliebe/Programmiersprache variieren (^, **, h, ...).
Lösung:
2*2*2 = 2^3
3 = 3^1
Ausgabe:
2^3 * 3^1
Viel Spaß
Lösungen:
C++ 17
C-Code
#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
vector<int> get_prime_factors(int n) {
vector<int>v;
auto i{ 2 };
while (i <= n) {
if (n % i == 0) {
n /= i;
v.push_back(i);
}
else
i++;
}
return v;
}
template<typename T>
bool map_contains_key(const map<T, T>& m, const T& compare) {
for (const auto& k : m)
if (k.first == compare)
return true;
return false;
}
template<typename T>
map<T, int> group_vector(const vector<T>& v) {
map<T, int>m;
for (const auto& i : v) {
if (map_contains_key(m, i))
m[i]++;
else
m.emplace(i, 1);
}
return m;
}
void print_primefactors(const vector<int>& v) {
for (const auto& i : v)
cout << i << ", ";
cout << "\n\n";
}
string get_power_notation(const vector<int>& v) {
string s;
auto grp{ group_vector(v) };
for (const auto& i : grp)
s += to_string(i.first) + "^" + to_string(i.second) + " * ";
s = s.substr(0, s.length() - 3);
return s;
}
int main()
{
auto pf{ get_prime_factors(168) };
print_primefactors(pf);
cout << get_power_notation(pf) << "\n";
}
