infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: ditzone din Martie 03, 2006, 18:23:40



Titlul: 188 Suma divizorilor
Scris de: ditzone din Martie 03, 2006, 18:23:40
Aici puteţi discuta despre problema Suma divizorilor (http://infoarena.ro/problema/sumdiv).


Titlul: 188 Suma divizorilor
Scris de: Paul-Dan Baltescu din Martie 11, 2006, 14:05:19
Puteti sa imi ziceti cat va da pe testele astea:

17297398 38883838
47468734 37682100
50000000 50000000
12345678 48765012

Thanx


Titlul: 188 Suma divizorilor
Scris de: Vlad Berteanu din Martie 11, 2006, 14:41:48
Daca nu am busit cand am bagat datele ar trebui sa dea asa
Cod:

2161
5304
7544
5200


Titlul: 188 Suma divizorilor
Scris de: Prigoana Alexandru din Martie 15, 2006, 13:29:46
nu stie cineva cum pot calcula restu impartirii la 9901 a unui produs de mai multe progresii geometrice? ... presupun ca un algoritm liniar nu intra in timp ... deci in timp logaritmic  ....  la ce ma ajuta faptul ca 9901 ii prim ?


Titlul: 188 Suma divizorilor
Scris de: u-92 din Martie 15, 2006, 13:36:30
O problema foarte asemanatoare  a fost propusa la preONI, articolul cu explicatii este aici: http://info.devnet.ro/articole.php?page=art&art=85&artpage=5
citeste articolele ;)


Titlul: Raspuns: 188 Suma divizorilor
Scris de: Rus Cristian din Aprilie 08, 2006, 09:08:34
si eu am o nelamurire asemanatoare... adica....cum calculez ((A^B-1)/(A-1)) modulo N ?...fara a efectua inpartirea?


Titlul: Raspuns: 188 Suma divizorilor
Scris de: ditzone din Aprilie 08, 2006, 09:38:32
Avand in vedere faptul ca N=9901 este prim poti transforma impartirea in inmultire... Adica pentru orice X exista un X' astfel incat
A/X = A*X' modulo N(oricare ar fi A). Acest X satisface proprietatea X*X'=1 (mod N) adica este simetricul lui X in corpul (Zn,*). Draguta algebra de a 12-a :)


Titlul: Raspuns: 188 Suma divizorilor
Scris de: Rus Cristian din Aprilie 08, 2006, 10:27:42
adica...tot ce traba sa fac e sa gasesc inversu numitorului?...si inmultesc cu el?...si fac modulo N?...


Titlul: Raspuns: 188 Suma divizorilor
Scris de: u-92 din Aprilie 08, 2006, 10:42:50
ai vazut link`ul de mai sus in care se explica exact cum se face chestia asta?  :-'


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Florian Marcu din Ianuarie 05, 2008, 21:52:11
Am citit topicul asta, insa nu prea m-am lamurit. Ati putea sa-mi spuneti cum pot calcula E=a^0+a^1+a^2+ ... +a^x  in timp logaritmic? Stiu cum se calculeaza logaritmic a^y, insa nu vad cum m-ar putea ajuta...


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Andrei Grigorean din Ianuarie 05, 2008, 22:04:20
Pai E ala este o progresie geometrica. Nu stii formula pentru progresii geometrice?


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Florian Marcu din Ianuarie 05, 2008, 22:07:45
Mda...am uitat ca mai exista si formula pt suma primilor n termeni ai unei progresii geometrice... Ce face timpul din oameni... Multumesc mult!  :thumbup:


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Adrian Diaconu din Ianuarie 05, 2008, 23:47:28
Sau poti aplica metoda folosita la problema Calcul. (vezi in articolul asta (http://infoarena.ro/preoni-2006/runda-4/solutii))


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Florian Marcu din Ianuarie 06, 2008, 13:14:28
Din ce am inteles din articolul ala:

In loc sa calculez (A^(B+1)-A) / (A-1), trebuie sa calculez [ (A-1) ^ (phi(9901)-1) ]* (A^(B+1)-A).
Deci in loc sa impart la (A-1) si sa aplic dupaia %9901, inmultesc cu inversul lui, care e de fapt (A-1)^(phi(9901)-1), putand aplica "%9901" la fiecare pas.
Am inteles bine?  Ca nu prea imi da corect...  :-k


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Andrei Grigorean din Ianuarie 06, 2008, 15:35:00
Vad ca ai TLE-uri la ultima sursa trimisa, nu WA-uri :).

Din cate imi aduc aminte, parca era un caz particular, cand A = 1. Nu mai stiu exact.


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Florian Marcu din Ianuarie 06, 2008, 18:19:09
La ultima sursa trimisa am facut in mod liniar... [ un fel de brute force ] . Nu imi da corect pe testele mele, daca fac cum scrie in articolul ala. Nu imi dau seama care e problema...  :? phi(9901)=9900, nu?


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Andrei Grigorean din Ianuarie 06, 2008, 21:31:07
Iti da bine atunci cand:

- A = 1
- B = 0
- A = 9901
- B = 1

?


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Florian Marcu din Ianuarie 07, 2008, 14:48:16
pt a=1 si b=0 imi da bine. Dar pt a=9901 si b=1 imi afiseaza 0.

Am ceva de genu:

 sol = ( p u t e r e ( i - 1 , 9901-2 )  *( p u t e r e ( i , b * r + 1)  - i ) ) % 9901;
 P = ( P * s o l ) % 9901;

unde P e solutia finala, iar "i" e factorul prim care apare la puterea "r" in factorizarea lui A.
Functia "putere(x,y)" imi returneaza x^y in O(log(y)),facand la fiecare pas (inmultire) operatia "%9901".

Care e greseala?  :sad:


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Andrei Grigorean din Ianuarie 07, 2008, 15:03:45
Poti sa iti iei testele de la ONI 2002 sa iti verifici (vezi Downloads).


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Florian Marcu din Ianuarie 07, 2008, 15:39:21
Ideea e ca nu imi da bine nici pe testele mele. Nu inteleg ce gresesc. Factorizarea o fac sigur bine, ridicarea x^y e sigur buna, insa nu stiu daca e bine cum aflu suma aia (1+a^1+..+a^b) . E bine ce am scris cu un post mai sus?


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Airinei Adrian din Ianuarie 07, 2008, 15:59:18
Nu faci bine suma, e (a^(b+1)-1)/(a-1)


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Florian Marcu din Ianuarie 07, 2008, 16:32:43
Ar trebui modificat si in articolul cu solutii pt "Calcul"... asta se intampla daca ai prea mare incredere in articole..  Multumesc de ajutor.
Acum imi iese, insa iau niste incorecturi. Problema apare atunci knd [a^(b+1)]%9901==0. Atunci knd scad 1, imi da -1, si imi iese numar negativ. Deci atunci knd a-ul este un multiplu a lui 9901. Cum as putea sa rezolv?


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Andrei Grigorean din Ianuarie 07, 2008, 17:17:25
Ar fi bine sa citesti cateva notiuni de teoria numerelor. Uita-te in Cormen :).

-1 congruent cu 9900 modulo 9901.


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Mircea Pasoi din Ianuarie 09, 2008, 09:07:51
Ar trebui modificat si in articolul cu solutii pt "Calcul"... asta se intampla daca ai prea mare incredere in articole..  Multumesc de ajutor.
Acum imi iese, insa iau niste incorecturi. Problema apare atunci knd [a^(b+1)]%9901==0. Atunci knd scad 1, imi da -1, si imi iese numar negativ. Deci atunci knd a-ul este un multiplu a lui 9901. Cum as putea sa rezolv?

Articolul n-are nimic gresit. Daca te uitai atent vedeai ca la Calcul suma incepe de la A^1, iar aici iti trebuie de la A^0, d-aia difera un pic formula.


Titlul: Răspuns: 188 Suma divizorilor
Scris de: floflofloflofloflo din Martie 09, 2008, 23:38:40
Se poate uita cineva pe sursa mea ? imi da bine, doar ca iau 10 puncte.
Ms anticipat.


Titlul: Răspuns: 188 Suma divizorilor
Scris de: A Cosmina - vechi din Iunie 21, 2009, 13:47:18
Eu nu imi dau seama,de ce iau numai 30 de puncte?Ce-i gresit in rezolvare?Mie imi da cum trebuie...

http://infoarena.ro/job_detail/325599   ???


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Pripoae Teodor Anton din Iunie 21, 2009, 14:08:00
Tu faci pow(a,b), a si b fiind 50 de milioane. Nu iti vor intra in nici un tip de date. De acolo iei wa.


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Sima Cotizo din Iunie 21, 2009, 16:50:53
long int tine valori pana la 232. Daca a si b ajung la 50 milioane, nici macar long long nu poate retine ab. Trebuie sa folosesti opreatiile cu numere mari (un numar retinut ca vector de cifre). Uite-te aici (http://infoarena.ro/multe-smenuri-de-programare-in-cc-si-nu-numai) pentru mai multe detalii despre asta.

In orice caz, rezolvarea ta nu este de 100 ;)


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Florian Marcu din Iunie 22, 2009, 10:48:23
Nu intra in timp.


Titlul: Răspuns: 188 Suma divizorilor
Scris de: A Cosmina - vechi din Iulie 24, 2009, 20:40:18
Am abordat problema in alt mod, de la ultimul post in acest topic am mai invatat cate ceva. :)

Am citit articolul (http://infoarena.ro/preoni-2006/runda-4/solutii) si am facut intocmai, am calculat intr-o functie (AB+1-A) / (A-1) . Iau doar 10 puncte pe sursa  (http://infoarena.ro/job_detail/333995) .

La multe teste nu se incadreaza in timp, totusi din cate am citit acesta pare cel mai bun algoritm. Ce am gresit ?  :baby:


Titlul: Răspuns: 188 Suma divizorilor
Scris de: Andrei Grigorean din Iulie 24, 2009, 22:08:18
In urma cu 2 posturi ti-a explicat cotizo ca nu poti calcula A la puterea B cu un for si sa il retii intr-un int/long/long long.


Titlul: Legaura inactiva
Scris de: Daniel Amariei din Decembrie 27, 2013, 23:13:39
Salutare!

Articolul de mai jos nu mai este activ; are cineva alta legatura care sa prezinte informatiile din articol  sau macar ceva similar ce ar putea ajuta la rezolvarea problemei?


http://info.devnet.ro/articole.php?page=art&art=85&artpage=5