Przykład 1
//*************************************************************************
// PROGRAM ROZKLADA NA CZYNNIKI PIERWSZE WPROWADZONA LICZBE
// Z KLAWIATURY ( WIEKSZA OD 1)
// - wyznacza liczby pierwsze, ktorych iloczyn daje wartosc wprowadzonej liczby
// - taki iloczyn jest tylko jeden jedyny
//*************************************************************************
// UWAGA: w petli for ustawiam ewentualne podzielniki a w petli while sprawdzam
// czy sa one czynnikami pierwszymi
// w petli for nie generuje liczb pierwszych tylko sprawdzam po kolei jak leci 2,3,4,5,itd
#include<iostream>
#include<cmath> // dolaczam biblioteke <cmath>
// bo w niej jest pierwiastek kwadratowy z liczby
using namespace std;
int main()
{
int a; // zmienna na wczytana liczbe z klawiatury
int b; // granica sprawdzania podzielnosci liczby
cin>>a;
b=sqrt(a); // zmienna b przyjmuje wartosc pierwiastka kwadratowego z
// wprowadzonej liczby.
// dlaczego tak przyjelam? dlaczego za granice sprawdzania podzielnosci wzielam
// pierwiastek kwadratowy z liczby wprowadzonej?
// bo wynika to z matematyki :-)
// czyli, jesli liczba jest liczba zlozona, to co najmniej jeden jej podzielnik
// ma wartosc mniejsza lub rowna jej pierwiastkowi kwadratowemu
// a reszta podzielnikow? tych większych od pierwiastka kwadratowego z liczby
// wprowadzonej?
// będzie tylko taki jeden jedyny, o!!
// czy granica sprawdzania podzielnosci wprowadzanej liczby moze byc inna?
// tak, np. <a lecz wtedy wykonujemy wiecej operacji
// dla przypomnienia: jesli liczba jest liczba pierwsza, to jej czynnikiem pierwszym jest
// ona sama
for (int i=2; i<=b; i++) // 2 jest pierwsza liczba pierwsza,
// i<=b jest tu rownosc, bo sprawdzam wraz z wartoscia
// pierwiastka kwadratowego z liczby bo np. 49 to 7^2
{
while (a%i==0) // dopoki wprowadzona liczba dzieli sie bez reszty przez i
// czyli jej podzielnikiem jest i
{
cout<<i<<","; // wypisz na ekranie wartosc podzielnika
a=a/i; // tutaj najwazniejsza linika kodu czyli zmniejszam a,
// zeby miec czynniki pierwsze a nie podzielniki
// np. dla 8 zeby bylo 2,2,2, a nie 2,4,
}
if ( a==1) // jesli wprowadzona liczba w wyniku operacji przypisania
// ma wartosc 1, to mamy juz wszystkie podzielniki
break; // i spokojnie mozemy przerwac petle for i caly program
// tak bedzie np. dla 8, 12 ale już dla 17 nie
}
if (a>1) // jesli wprowadzona liczba w wyniku operacji przypisania
// ma wartosc wieksza od 1, to ta wartosc jest jej podzielnikiem
cout<<a; // i wypisuje ten podzielnik
// nasza 17 wlasnie sie lapie w tej opcji
// lapie sie tez podzielnik 3 liczby 6, ktory jest wiekszy od pierwiastka kwadratowego z 6
cin.get();
cin.ignore();
return 0;
}