Titlul: 048 Suma si numarul divizorilor Scris de: Marius Stroe din Februarie 27, 2010, 21:29:49 Aici puteţi discuta despre problema Suma si numarul divizorilor (http://infoarena.ro/problema/ssnd).
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Cosmin Negruseri din Februarie 28, 2010, 15:49:12 Poti sa faci suma divizorilor fara invers modular.
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Andrei Misarca din Februarie 28, 2010, 18:07:39 Poti sa faci suma divizorilor fara invers modular. Cred că merge făcută împărțirea direct, posibil să nu iasă din long long. La asta te refereai? :)Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Borsos Zalan din Martie 09, 2010, 10:15:01 pndn+1-1=(pn-1)*(pndn+pndn-1+pndn-2+...+dn+1)
Aşadsar (pndn+1-1)/(pn-1)=pndn+pndn-1+pndn-2+...+dn+1 şi nu trebuie folosit inversul modular. Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: MciprianM din Martie 13, 2010, 10:32:25 Am luat 100 fara ciurul lui Eratostene. Poate ar trebui date niste teste mai "grele".
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Andrei Misarca din Martie 13, 2010, 15:35:42 Am luat 100 fara ciurul lui Eratostene. Poate ar trebui date niste teste mai "grele". Am observat că sunt soluții care iau 100 și fără ciur, dar având în vedere că ideea principală a acestei probleme este aceea de a învăța că suma și numărul divizorizorilor se pot calcula și altfel decât căutând prin toate numerele mai mici ca N, nu cred că se impune ca testele să fie mai puternice.Totuși, dacă este nevoie voi schimba o parte din teste. Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Tudorica Andrei din Iunie 18, 2010, 14:58:20 ma poate ajuta si pe mine cineva va rog? nu inteleg ce gresesc aici
Cod: #include<fstream> Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Simoiu Robert din Iunie 18, 2010, 16:30:07 Incearca sa pui limitele mai mari odata. Si in rest nu stiu, ia testele si vezi de ce nu iti da corect .
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: SAlexandru din Iunie 18, 2010, 17:20:52 n[l], dupa ce l-ai descompus in factori primi, poate fi mai mare ca 1, ai uitat cazul asta :)
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Tudorica Andrei din Iunie 20, 2010, 08:33:17 ](*,) ](*,) ](*,)tot 50 pct:( ms băieţii am schimbat alea dar nu face nik am 2 incorecte si trei kill
alea două incorecte din 10 nr nu calculează bn la două si nu inteleg dc:(:(:( are cineva vre-o idee???? :annoyed: :-s :-s corectie 2 incorecte si tre TLE Nu posta succesiv pe acelasi subiect. Modifica mesajele anterioare! Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: SAlexandru din Iunie 20, 2010, 11:48:54 Sursa ta nu este implementata de 100pct din cate vad. Am vazut ca ai facut ciurul, dar pe tine nu te ajuta daca x este prim sau nu, ci te intereseaza care sunt numerele prime <= maxn. Plus ai niste probleme cu aritmetica modulara :
(a+b)%Modulo <=> ( a%Modulo + b%Modulo )%Modulo. (a*b)%Modulo <=> ( (a%Modulo) * (b%Modulo) )%Modulo. Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Ilie Ionut din Iunie 29, 2010, 17:03:34 Nu inteleg de ce sursa oficiala se complica in cazul cand n ramane > 1 si mai calculeaza fractia din formula, pentru ca e clar ca noul factor prim (adica n) apare in N la puterea 1, deci suma divizorilor trebuie sa se mai inmulteasca doar cu n+1.
Sunt cazuri cand intr-un numar din fisierul de intrare apare un factor prim cu exponentul 1 si al carui patrat nu ar intra pe long long si conform formulei o sa se apeleze factorul la puterea a doua. De exemplu programul nu o sa mearga daca in fisier e numarul 999999999989. Ar trebui inlocuita partea asta Cod: if(n > 1) cu asta Cod: if(n > 1) Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Andrei Misarca din Iunie 29, 2010, 17:43:11 Ai dreptate, mersi pentru sesizare. Am modificat sursa oficială. :)
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Marius Petcu din August 30, 2010, 14:20:58 Lucru dubios... dupa cum s-a mai zis... merge si fara ciur... Cred ca ar trebui revizuite testele... Macar unul sa fie la limita si sa le grupati pe ultimele 3 ca sa se ia 70
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Andrei Misarca din August 30, 2010, 20:28:47 Lucru dubios... dupa cum s-a mai zis... merge si fara ciur... Cred ca ar trebui revizuite testele... Macar unul sa fie la limita si sa le grupati pe ultimele 3 ca sa se ia 70 Din păcate nu se prea poate face diferențierea între soluțiile care folosesc ciurul și cele care nu-l folosesc. Pe ultimele 2 teste numerele sunt aproape de limita maximă, așa că nu prea văd cum am putea scoate un test la limită. Dacă ai vreo propunere, ea este binevenită. :) Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Mihai Calancea din August 30, 2010, 22:04:30 Fiecare n sa aiba un divizor prim > sqrt(n). Asta e probabil maximul care se poate face fara prea mult efort.
Si totusi, nu cred ca are foarte multa relevanta faptul ca merge si fara ciur. Ideea acestei probleme e sa te invete ca putina matematica aduce intotdeauna eleganta si eficienta. Ciurul are problema lui separata. Cred ca toate problemele din arhiva educationala ar trebui abordate astfel: nu 'sa se invete o problema' , ci sa se faca o mica conexiune. Multi incepatori, dupa ce rezolva Numerele lui Stirling de ex. , isi spun 'Hah, stiu numerele lui stirling'. Si defapt poti ramane cu mai multe, gen 'uite frate, unele probleme de combinatorica merg mana in mana cu programarea dinamica si imi pare si logic fiindca etc etc'. Dupa parerea mea, ar trebui incurajata chestia asta, dar recunosc ca nu prea am idee cum. Ma scuzati pentru postul prea lung( probabil am si exagerat putin cu ce am spus), dar am ramas cu impresia ca multi utilizatori ( dintre cei mai noi, intr-adevar ) vad arhiva educationala ca ' Informatica in X pasi simpli ' sau alte lucruri de genul. Ori nu e asa. Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Simoiu Robert din August 30, 2010, 22:38:41 Am incercat sa fac eu un test dupa ce a spus Mihai, dar vad ca se comporta destul de bine solutia . Si oricum nu conteaza ca merge si fara ciur .... ideea trebuie prinsa ...
Cod: 10 Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Andrei Misarca din August 31, 2010, 09:36:21 Singura soluție care ar merge în acest moment ar fi să schimb structura testelor, ceea ce ar însemna ca toată lumea să retrimită soluțiile => nu merită. Cum a zis și Mihai, pentru ciur există o problemă separată, ideea acestei probleme fiind cu totul alta.
Îmi cer scuze pentru neplăcerile cauzate. Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Savin Tiberiu din August 31, 2010, 10:14:35 Singura soluție care ar merge în acest moment ar fi să schimb structura testelor, ceea ce ar însemna ca toată lumea să retrimită soluțiile => nu merită. Cum a zis și Mihai, pentru ciur există o problemă separată, ideea acestei probleme fiind cu totul alta. Admini pot reevalua problemele daca numarul de surse nu depaseste o anumita limita. M-am uitat acuma si vad ca la problema asta numarul de surse nu depaseste acea ca poti sa schimbi testele si sa rogi un admin sa reevalueze.Îmi cer scuze pentru neplăcerile cauzate. Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Andrei Misarca din August 31, 2010, 10:38:38 Admini pot reevalua problemele daca numarul de surse nu depaseste o anumita limita. M-am uitat acuma si vad ca la problema asta numarul de surse nu depaseste acea ca poti sa schimbi testele si sa rogi un admin sa reevalueze. Din ce văd, și ownerii taskului pot face reevaluarea. Voi reface zilele acestea testele și voi reevalua. :)Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Andrei Grigorean din August 31, 2010, 18:37:59 Se pot reevalua toate sursele trimise la o problema, insa nu mai mult de 500 (?) deodata. Se pot folosi filtrele job_begin si job_end pentru a imparti problemele in grupuri care sa respecte limita maxima de surse.
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Andrei Misarca din August 31, 2010, 21:15:15 Am modificat testele, acum sper să nu mai fie probleme și am dat un reeval. Îmi cer scuze pentru neplăcerile cauzate.
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: George Marcus din Ianuarie 17, 2011, 21:51:53 A/B = A * B-1
Tu ai de calculat valoarea % M a sumei. (A/B)%M= [(A % M) * (B-1 % M)] % M Acel B-1 reprezinta inversul modular al lui B. ( B * B-1 % M = 1, B-1 e intreg ) Acest lucru e folositor pentru ca poti retine doar valoarea modulo M a valorii lui A si B fara a avea probleme cu memoria (sa iasa din long long). Asa ceva :)... sper ca te-a ajutat. Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Tudor Tiplea din August 20, 2011, 20:26:29 Salut! Imi zice si mie cineva de ce sursa asta http://infoarena.ro/job_detail/609359?action=view-source (http://infoarena.ro/job_detail/609359?action=view-source) ia TLE pe un test, va rog? Multumesc anticipat!
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Sorin Rita din August 20, 2011, 21:06:01 Cred ca din cauza vectorului ala ciur. Incearca sa folosesti bitset din STL.
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: George Marcus din August 20, 2011, 21:21:56 Exact, cu bitset sau poti imbunatati ciurul (cum am facut eu :D)
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Tudor Tiplea din August 21, 2011, 16:20:47 Am utilizat bitset si am reusit. Multumesc frumos! :D
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: cont cu nume gresit sau fals din Octombrie 11, 2011, 15:17:28 noul timp e bun pt problema asta (cele 100 de puncte pot fi luate), dar ar trebui schimbata sursa oficiala (http://infoarena.ro/job_detail/616025) care pica pe 3 teste.
Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Posea Elena din Octombrie 28, 2011, 14:02:36 Salutare,
am implementat solutia, sursa e aici: http://infoarena.ro/job_detail/626840?action=view-source problema e ca de la testul 5 in colo, iau killed by signal 8. din cate am vazut pe internet asta inseamna ca, la un mom dat in program am facut un calcul/adunare/inmultire care a iesit din spatiul unui long int (eu am fol numai long int-uri). oricat de simpla ar parea intrebarea, nu ma prind unde s-ar putea intampla asta, mai ales ca mie, pentru datele de la testul 5 cel putin, nu-mi da nicio eroare (l-am compilat+rulat de pe linux si pare ok, mi-a dat bine la iesire) Orice parere/indicatie de unde ar putea veni problema e bine venita! :) Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Simoiu Robert din Octombrie 28, 2011, 15:04:52 Ti-am obtinut
[L.E.] Se pare ca ti-am scos 100 pct pana la urma (http://infoarena.ro/job_detail/626906?action=view-source), am folosit dupa cum vezi urmatoarea chestie : in acel for, daca n nu se imparte exact la prim[ i ] atunci nu il mai las sa continue degeaba, face multe operatii aiurea (o comparare din acel while, si o inmultire fara rost), si am mai pus i < k in acel for (adica sa nu depasesc limita vectorului prim[ i ], desi nu cred ca e o problema daca nu ai pune acea conditie). Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Posea Elena din Octombrie 28, 2011, 17:10:32 Multumesc frumos! :)
nu ma asteptam sa conteze atat de mult niste impartiri; ma gandisem si eu sa pun un if acolo, dar am vazut ca formula avea sens si mergea si daca factorul era la puterea 0 :D Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Ionut Redox din Decembrie 07, 2014, 11:09:51 #include <iostream>
#include <fstream> using namespace std; int main() { ifstream f("ssnd.in"); ofstream g("ssnd.out"); int v[50],i,t,s,nr,j; f>>t; for(i=1;i<=t;i++){ f>>v; s=0; nr=0; for(j=1;j<=v;j++){ if(v%j==0){ nr++; s+=j; }} g<<nr<<" "<<s<<endl;}} Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Iacob Eduard din August 24, 2015, 22:37:07 Nu am inteles exact bucatica aceasta de cod, imi explica cineva, va rog?
Cod: if(n > 1) [EDIT]: De ce nd se inmulteste cu 2? Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Vali Deaconu din Martie 11, 2016, 00:49:27 Nu am inteles exact bucatica aceasta de cod, imi explica cineva, va rog? Cod: if(n > 1) [EDIT]: De ce nd se inmulteste cu 2? Înseamnă că la descompunerea în factori primi ai lui N, s-a găsit factorul prim n (n != N) la puterea 1, deci se înmulțește numărul divizorilor cu 2, adică e+1, unde e = exponentul lui n, adică 1. Pentru suma divizorilor, se calculează conform formulei, fără să se aplice invers modular. A făcut cineva problema pe euclid extins? Eu nu pot să iau decât 70 de puncte... Pe inversul cu mod-2 iau 100, dar sunt curios, de ce nu merge și pe euclid extins? :-k Titlul: Răspuns: 048 Suma si numarul divizorilor Scris de: Burcea Bogdan Madalin din Martie 07, 2017, 12:51:49 Am gasit un test pe care solutia de 100 de puncte da un rezultat gresit :D
1 99799811 Aceasta da: 4 -9938 Cand corect este: 4 35 |