Forum » Programiranje » perfektno stevilo
perfektno stevilo
MC Rozica ::
Yo
Jaz mam problem pri teli nalogi. Bom kr celo napisal.
Napisi funkcijo, ki za dano pozitivno celo število pove, če je število perfektno. Neko število je perfektno, če je vsota svojih deliteljev brez samega sebe. Prime: Število 6=1+2+3 je perfektno.
Drugač sm tko mal premisljeval kva bi naredu, pa mi je tko neki prslo v misel da je neki v zvezi ostanki pr deljenju z svojimi delitelji. Sm to se mi zdi mal cudn.
Vseen hvala ce bo kdo pomagal.
Jaz mam problem pri teli nalogi. Bom kr celo napisal.
Napisi funkcijo, ki za dano pozitivno celo število pove, če je število perfektno. Neko število je perfektno, če je vsota svojih deliteljev brez samega sebe. Prime: Število 6=1+2+3 je perfektno.
Drugač sm tko mal premisljeval kva bi naredu, pa mi je tko neki prslo v misel da je neki v zvezi ostanki pr deljenju z svojimi delitelji. Sm to se mi zdi mal cudn.
Vseen hvala ce bo kdo pomagal.
Yo muthafaka
Mavrik ::
Moraš se spomnit metode za iskanje deliteljev iz srednje šole. Potem poiščeš delitelje števila in preveriš če ustrezajo pogoju. Kje točno maš problem?
The truth is rarely pure and never simple.
MC Rozica ::
Ja nevem kko bi funkcijo napisal.
Pa drugac sm v sredni soli sam pri letnici sem se zmotu.
Pa drugac sm v sredni soli sam pri letnici sem se zmotu.
Zgodovina sprememb…
- spremenil: MC Rozica ()
incognito ::
Bi morda šlo bolje če bi razčlenil problem na manjše enote; če ti uspe napisati spodnje funkcije (imena in sintaksa so simbolna, saj nisem zasledil jezika v katerem programiraš) ti bo zagotovo uspelo sestaviti celotno rešitev:
1) int arraySum( arrayOfInts ), ki vrne vsoto števil v polju arrayOfInts
2) bool dividesInt( int1, int2 ), ki preveri ali int2 deli int1? (namig: uporaba operatorja %, ki vrne ostanek pri celoštevilskem deljenju)
in z uporabo 2) še
3) array getDividersOfInt( int1 ), ki vrne array vseh deljiteljev števila int1
LP, r
1) int arraySum( arrayOfInts ), ki vrne vsoto števil v polju arrayOfInts
2) bool dividesInt( int1, int2 ), ki preveri ali int2 deli int1? (namig: uporaba operatorja %, ki vrne ostanek pri celoštevilskem deljenju)
in z uporabo 2) še
3) array getDividersOfInt( int1 ), ki vrne array vseh deljiteljev števila int1
LP, r
marko20 ::
The Euclid-Euler Theorem
But how have mathematicians been able to discover these perfect numbers? Crilly says that the combined work of two mathematicians, who lived 2000 years apart, provides the answer. Their names were Euclid of Alexandria and Leonhard Euler and their formula, 2^(n−1) X (2n − 1), ^ indicates 'to a power of', known as the Euclid-Euler Theorem, would unlock the secret to generating perfect numbers.
Mersenne Primes
Every good lock must have a key and it was the findings of a French monk named Father Marin Mersenne that would provide the key to Euclid and Euler’s Theorem. Crilly noted that Father Mersenne had worked with numbers generated by 2 to a power, minus 1, or (2^n) -1. These Mersenne numbers include
* 2^1-1=2-1=1
* 2^2-1=4-1=3
* 2^3-1=8-1=7
* 2^4-1=16-1=15
* 2^5-1=32-1=31
Insert a prime Mersenne number into the Euclid-Euler Theorem and the result is a Perfect Number.
Other Facts About Perfect Numbers
With the exception of 6, a perfect number divided by 9 gives remainder 1. All perfect numbers can be arrived at by adding consecutive numbers i.e 1+2+3 … and ending with a Mersenne prime.
But how have mathematicians been able to discover these perfect numbers? Crilly says that the combined work of two mathematicians, who lived 2000 years apart, provides the answer. Their names were Euclid of Alexandria and Leonhard Euler and their formula, 2^(n−1) X (2n − 1), ^ indicates 'to a power of', known as the Euclid-Euler Theorem, would unlock the secret to generating perfect numbers.
Mersenne Primes
Every good lock must have a key and it was the findings of a French monk named Father Marin Mersenne that would provide the key to Euclid and Euler’s Theorem. Crilly noted that Father Mersenne had worked with numbers generated by 2 to a power, minus 1, or (2^n) -1. These Mersenne numbers include
* 2^1-1=2-1=1
* 2^2-1=4-1=3
* 2^3-1=8-1=7
* 2^4-1=16-1=15
* 2^5-1=32-1=31
Insert a prime Mersenne number into the Euclid-Euler Theorem and the result is a Perfect Number.
Other Facts About Perfect Numbers
With the exception of 6, a perfect number divided by 9 gives remainder 1. All perfect numbers can be arrived at by adding consecutive numbers i.e 1+2+3 … and ending with a Mersenne prime.
joze67 ::
(1) gre za nalogo iz programiranja, ne iz iskanja formul, ki jih ne razumemo
(2) EE forula velja za soda števila; sodeč po Wikipedii ni znano, ali obstajajo liha perfektna števila
Če bi meni McFlower sprogramiral formulo, bi mu vstavil liho število in ga prašal, kako iz formule ve, da je odgovor pravilen. Pa bi šla naloga.
Najlažje (ne najbolje oz. najhitreje) se naloga reši z eno for zanko, ki gre do n/2 (zgornja meja za delitelja) in preveri, ali je delitelj ali ne, ter jih sešteje. Napiše se torej v eni vrstici
je pa algoritem, khm, eksponenten (O(e^i), kjer je i=log n, kolikor potrebujemo, da zapišemo n).
(2) EE forula velja za soda števila; sodeč po Wikipedii ni znano, ali obstajajo liha perfektna števila
Če bi meni McFlower sprogramiral formulo, bi mu vstavil liho število in ga prašal, kako iz formule ve, da je odgovor pravilen. Pa bi šla naloga.
Najlažje (ne najbolje oz. najhitreje) se naloga reši z eno for zanko, ki gre do n/2 (zgornja meja za delitelja) in preveri, ali je delitelj ali ne, ter jih sešteje. Napiše se torej v eni vrstici
bool perfect(int n) { int sum=0; for(int i=1;i<=n/2;i++) if (n%i==0) sum+=i; return sum==n; }
je pa algoritem, khm, eksponenten (O(e^i), kjer je i=log n, kolikor potrebujemo, da zapišemo n).
Genetic ::
je pa algoritem, khm, eksponenten (O(e^i), kjer je i=log n, kolikor potrebujemo, da zapišemo n).
e^i, kjer je i=log n je e^(log n) = n,
tako da algoritem ni eksponenten, ampak kar O(n) (zraven pride kvecjemu se kaksna konstanta, ce log nima osnove e).
joze67 ::
A to pa ne.
Velikostni razred se meri glede na velikost vhoda, ki je i (torej log n), ne n. Če potrebuje O(n), je psevdo-linearen. Če potrebuje O(i), je linearen.
Mogoče je malce nesrečna izbira imen; tu je n vhodni podatek, pri O-notaciji pa z n označimo število vhodnih podatkov. Ni isto.
Velikostni razred se meri glede na velikost vhoda, ki je i (torej log n), ne n. Če potrebuje O(n), je psevdo-linearen. Če potrebuje O(i), je linearen.
Mogoče je malce nesrečna izbira imen; tu je n vhodni podatek, pri O-notaciji pa z n označimo število vhodnih podatkov. Ni isto.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [python] project euler problemOddelek: Programiranje | 1280 (832) | Spura |
» | NUJNO!Algoritmi C++Oddelek: Pomoč in nasveti | 1963 (1225) | DOOM_er |
» | Naloga iz Putka - UPMOddelek: Programiranje | 2215 (1551) | NejcSSD |
» | [NALOGA] največji skupni delitelj dveh celih številOddelek: Programiranje | 5240 (4861) | Thomas |
» | Matematično vprašanje v zvezi s lotomOddelek: Programiranje | 1999 (1667) | OwcA |