Neurochirurgie minim invazivă
"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv. Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice. www.neurohope.ro |
[Tema] Numar divizori campion
Last Updated: Mar 14 2015 16:09, Started by
aLexCM
, Dec 14 2014 17:11
·
0
#1
Posted 14 December 2014 - 17:11
Buna ziua.
Am facut acestaproblema de pe campion.edu insa iau doar 10 puncte pe ea. Imi spune "Time limit exceted" si " Wrong answer". Codul este aici: #include <iostream> #include <fstream> using namespace std; ifstream fin("nrdiv.in"); ofstream fout("nrdiv.out"); int main() { unsigned int N,i,x,k,nrdivizori; fin>>N; for(i=1;i<=N;i++) { fin>>x; nrdivizori=0; for(k=1;k<=x;k++) if(x%k==0) nrdivizori++; fout<<nrdivizori<<endl; } fin.close(); fout.close(); return 0; } Nu stiu de ce zice "wrong answer" deoarece am introdus in fisier.in exemplul de pe site si mi-a dat acelasi rezultat in fisierul de iesire. Vreau sa stiu si eu unde gresesc. Multumesc! Edited by aLexCM, 14 December 2014 - 17:11. |
#2
Posted 14 December 2014 - 17:20
#3
Posted 14 December 2014 - 17:44
Problema se face altfel si anume folosind formula de calculare a numarului de diviziori a unui numar stiindu-se descompunerea lui in produs de numere prime.
Daca n=p1k1p2k2...pmkm atunci numarul de divizori ai lui n este (1+k1)*(1+k2)..(1+km). Forta bruta nu merge pentru orice problema. |
#4
Posted 14 December 2014 - 18:38
Cy_Cristian, on 14 decembrie 2014 - 17:44, said:
Problema se face altfel si anume folosind formula de calculare a numarului de diviziori a unui numar stiindu-se descompunerea lui in produs de numere prime. Daca n=p1k1p2k2...pmkm atunci numarul de divizori ai lui n este (1+k1)*(1+k2)..(1+km). Forta bruta nu merge pentru orice problema. Am facut cum ai zis tu dar nu imi da niciun rezultat. Cred ca am gresit pe undeva. Uite codul: #include <iostream> #include <fstream> using namespace std; ifstream fin("nrdiv.in"); ofstream fout("nrdiv.out"); int main() { int x,poz,N,i=2,exponent,nrdivizori=1; fin>>N; for(poz=1;poz<=N;poz++) { fin>>x; while(x!=0) { exponent=0; while(x%i==0) { exponent++; x=x/i; i++; nrdivizori=nrdivizori*(1+exponent); } } fout<<nrdivizori; } fin.close(); fout.close(); return 0; } Edited by aLexCM, 14 December 2014 - 18:38. |
#6
Posted 14 December 2014 - 19:37
aLexCM, on 14 decembrie 2014 - 18:38, said:
Am facut cum ai zis tu dar nu imi da niciun rezultat. Cred ca am gresit pe undeva. Uite codul: Asa se pare. Hai s-o disecam putin codul. 1. Ce face secventa de mai jos? while(x!=0)2. Dar asta? while(x%i==0) { exponent++; x=x/i; i++; nrdivizori=nrdivizori*(1+exponent); } In plus, daca tu faci probleme peste nivelul clasei, poate ar trebui sa stii sa faci si debug. |
#7
Posted 14 December 2014 - 19:37
#8
Posted 14 December 2014 - 19:39
Prea tarziu pentru un "LE".
Cum traduci tu in cod cerinta asa? Quote • 1 ≤ numerele din secvenţă ≤ 1013 |
#9
Posted 14 December 2014 - 19:45
Cy_Cristian, on 14 decembrie 2014 - 19:37, said:
Asa se pare. Hai s-o disecam putin codul. 1. Ce face secventa de mai jos? while(x!=0)2. Dar asta? while(x%i==0) { exponent++; x=x/i; i++; nrdivizori=nrdivizori*(1+exponent); } In plus, daca tu faci probleme peste nivelul clasei, poate ar trebui sa stii sa faci si debug. 2. Aici: -i=2 : este primul numar prim -while(x%i==0) : cat timp numarul introdus este divizibil cu i, adica cu 2, o sa creasca exponentul, x-ul devine x/2 si creste si i-ul. -ala cu nrdivizori am aplicat ce mi-ai spus tu. Algoritmul acela pana la nrdizivori este descompunerea in fatori primi. Asa am vazut ca se face descompunerea. Edited by aLexCM, 14 December 2014 - 19:57. |
#10
Posted 14 December 2014 - 19:49
acel i nu trebuie sa-l cresti dupa ce nu mai poti face impartiti exacte?
|
|
#11
Posted 14 December 2014 - 19:50
#12
Posted 14 December 2014 - 19:51
#13
Posted 14 December 2014 - 19:51
#14
Posted 14 December 2014 - 19:52
#15
Posted 14 December 2014 - 20:00
|
#16
Posted 14 December 2014 - 20:05
#17
Posted 14 December 2014 - 20:10
Cy_Cristian, on 14 decembrie 2014 - 20:00, said:
Ce tipuri de date stii tu ca exista in C? Si cand/la ce folosesc ele? 1. int : pentru numere intregi; 2. float: pentru numere reale; 3. usigned int: pentru numere naturale; 4 bool: pentru adevarat sau fals; 5: double: numere cu zecimale; 6. char: pentru caractere; + alea cu short/long/ long long int MarianG, on 14 decembrie 2014 - 20:05, said:
cum ai descrie cerinta in cuvinte Numerele pe care le indroduc in fisier sa fie mai mari decat 1 si mai mici decat 1013? |
#18
Posted 14 December 2014 - 20:12
Cand folosesti:
1. char/unsigned char 2. short int/unsigned short int 3. int/unsigned int 4. .... Completeaza tu mai departe cu tipuri de date numerice (bool nu ne intereseaza acum). De ce crezi ca exista mai multe tipuri de date numerice? De float ai invatat auzit? De ce exista float daca avem double? Toate intrebarile sunt facute pentru a te duce spre raspuns. Posibil ca raspunsul sa necesite niste "cercetare". Spor. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users