Rozklad na prvočinitele – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Rozklad na prvočinitele – C / C++ – Fórum – Programujte.comRozklad na prvočinitele – C / C++ – Fórum – Programujte.com

 

TomBar0
Newbie
20. 5. 2010   #1
-
0
-

Pokouším se napsat program na rozklad čísla na prvočinitele.

#include <iostream>


using namespace std;

bool prime(int a){
int x;
for(x=2;x<a/2+2;x++){
if(a%x==0){
return 0; break;}}
if (a%x!=0) return 1;
}

int exp(int a,int b){
for(int x=0;x<(b-1);x++){
a*=a;}
return a;}

int main(){
int cislo,l=1,num;
int * prvocisla;
cin>>cislo;
num=cislo/2;
prvocisla=new int[l];
for(int n=2;n<num+1;n++){
if (prime(n)==1){prvocisla[l]=n;l++;}}
for(int m=0;m<l;m++){
for(int o=1;cislo%(exp(prvocisla[m],o)==0);o++)
{cout<<prvocisla[m]<<" ";}}
cin.get();cin.get();
return 0;}

vím že některé věci v tom mám zbytečně (např. napřed zjišťování jaká jsou prvočísla menší než číslo, které chci rozložit). Ale myslím, že to není ten problém, kvůli kterému to nefunguje. Vždy mi to napíše "V aplikaci prvocinitele.exe došlo k problému a je třeba ji zavřít. Omlouváme se za vzniklé potíže."
hledal jsem tam nějaké dělení nulou, ale nic jsem nenašel.
Poradili byste mi prosím, kde je v tom ten problém?
Dík

Nahlásit jako SPAM
IP: 85.70.1.–
m->29+6
Super člen
21. 5. 2010   #2
-
0
-

Myslím, že by to mohlo byť tu: if (prime(n)==1){prvocisla[0]=n;l++;}}

Nahlásit jako SPAM
IP: 147.229.208.–
TomBar0
Newbie
21. 5. 2010   #3
-
0
-

V tom problém nevidim. První člen na první člen v poli by se mělo odkazovat Array[0]...

Nahlásit jako SPAM
IP: 212.24.137.–
TomBar0
Newbie
21. 5. 2010   #4
-
0
-

a navíc když to nechám aby se to ty prvočísla vypsalo, tak je to vypíše. myslim, že problém bude někde jinde :-/

Nahlásit jako SPAM
IP: 212.24.137.–
Bald3rr0
Super člen
21. 5. 2010   #5
-
0
-

To TomBar : Ty alokuješ pole o velikosti l, které má hodnotu 1 --> Pak přistupuješ na index prvocisla[l] (prvocisla[1]), což je špatně. Jediný index toho pole je prvocisla[0]. Navíc potom l++ zvětšuješ a chtěl bys do pole zapisovat znova. Buď musíš alokovat větší pole nebo ho poté realokovat.

Nahlásit jako SPAM
IP: 82.100.0.–
Jouda
~ Anonymní uživatel
53 příspěvků
21. 5. 2010   #6
-
0
-

prvocisla=new int[l]; // tohle je blbost....vytvoris pole o 1 prvku.....to znamena pole s maximalnim indexem 0.....

for(int n=2;n<num+1;n++){

if (prime(n)==1){prvocisla[l]=n;l++;}} // prvek prvocisla[l] = prvocisla[1] a ten neexistuje....

for(int m=0;m<l;m++){

for(int o=1;cislo%(exp(prvocisla[m],o)==0);o++) //stejny pripad jako vyse....existuje pouze prvek 0

{cout<<prvocisla[m]<<" ";}}

Nahlásit jako SPAM
IP: 212.20.106.–
Jouda
~ Anonymní uživatel
53 příspěvků
21. 5. 2010   #7
-
0
-

To Bald3rr : si me predbeh :)

Nahlásit jako SPAM
IP: 212.20.106.–
janko
~ Anonymní uživatel
7 příspěvků
12. 2. 2013   #8
-
0
-

Tu je moje riesenie. Este nemam vela skusenosti tak to nebude asi oku lahodiacie ale malo by to ist..

AK mate nejake pripomienky co zmenit alebo vylepsit (ako inak postupovat), sem s nimi. vdaka.

#include<iostream>
using namespace std;

int main()
{
cout<<"zadaj cislo";
int x;
cin>>x;

int sum=0;
int pole[100];
int delitel=2;
cout<<endl;
    while(delitel<=x)
     {   
       if ((x%delitel)==0)
           {
           sum++;
           pole[sum]=delitel;
           cout<<pole[sum]<<"  "; 
           x=x/delitel;
           }
       else   
            delitel++;
       }+
system("pause");   
}

Nahlásit jako SPAM
IP: 88.212.33.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 21 hostů

Podobná vlákna

Rozklad na prvočinitele — založil Rozklad na prvočinitele

Rozklad čísla — založil Jan Novák

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý