Zadanie 4
Napisz program który wczyta jedną liczbę, a następnie wyświetli
jej wszystkie czynniki pierwsze. Wczytywana liczba należy do zakresu 2 -10000.Przykład:
podaj liczbę: 45
dzielniki liczby: 3, 5Wersja trudniejsza:
Rozłóż wczytaną liczbę na czynniki pierwsze.
Przykład:
podaj liczbe: 45
rozkład na czynniki: 3* 3 *5
Wersja łatwiejsza:
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include<conio.h>
using namespace std;
int TestPierwsza(long long p)
{
long long r = sqrt(p);
long long i = 2;
while (i <= r) if (!(p%i++)) return 0;
return 1;
}
int main()
{
int liczba;
cout << "Podaj liczbe: ";
cin >> liczba;
cout << "Dzielniki liczby: ";
for (int i = 2; i < liczba + 1; i++)
{
if (liczba % i == 0 && TestPierwsza(i) == 1)
{
cout << i << ", ";
}
}
_getch();
}
I teraz właśnie myślę jak to załatwić, chyba powinienem zamiast wyświetlać ten czynnik dzielić liczbę przez ten czynnik i tak dalej, aż wyjdzie liczba == 1, więc przyda mi się jeszcze jedna pętla - dobrze myślę?
Jeszcze przetestuję czy działa, ale załatwiłem to funkcją while( liczba !=1), teraz jeszcze moglibyście mi pomóc w tym, żeby te liczby były posegregowane od największej do najmniejszej i sprawdzić czy kod prawidłowy.
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include<conio.h>
using namespace std;
int TestPierwsza(long long p)
{
long long r = sqrt(p);
long long i = 2;
while (i <= r) if (!(p%i++)) return 0;
return 1;
}
int main()
{
int liczba;
cout << "Podaj liczbe: ";
cin >> liczba;
cout << "Rozkład na czynniki pierwsze ";
while(liczba != 1){
for (int i = 2; i < liczba + 1; i++)
{
if (liczba % i == 0 && TestPierwsza(i) == 1)
{
liczba = liczba/i;
cout << i<<"*";
}
}
}
_getch();
}