Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cuțit/ briceag drumetie

Cum am acces la o parte dintr-un ...

Mother's Day

Recomandare aparat de vidat alime...
 Izolatie exterioara casa parter P...

Cuvinte si expresii neclare

Mod de lucru Purmo Tempco Digital...

Samsung S90C vs LG C3
 Problema sunet RCS

Amortizor sertare bucatarie

Codrea Pallady

Blocurile goale! Orase in car...
 Motorul pe benzina 1.0 SCe65

Mostenire In 1986

Lentile sferica pentru astigmatism

Problema inlocuire usa spate A6 C...
 

[Tema] Numar divizori campion

- - - - -
  • Please log in to reply
44 replies to this topic

#1
aLexCM

aLexCM

    Active Member

  • Grup: Members
  • Posts: 1,079
  • Înscris: 26.01.2014
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
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,473
  • Înscris: 10.08.2005
http://forum.softped...ar-cu-do-while/
http://forum.softped...vizori-a-lui-d/

#3
Cy_Cristian

Cy_Cristian

    Active Member

  • Grup: Members
  • Posts: 1,845
  • Înscris: 22.02.2009
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
aLexCM

aLexCM

    Active Member

  • Grup: Members
  • Posts: 1,079
  • Înscris: 26.01.2014

View PostCy_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.


#5
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,473
  • Înscris: 10.08.2005
si unde este lista cu numere prime?

#6
Cy_Cristian

Cy_Cristian

    Active Member

  • Grup: Members
  • Posts: 1,845
  • Înscris: 22.02.2009

View PostaLexCM, 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
aLexCM

aLexCM

    Active Member

  • Grup: Members
  • Posts: 1,079
  • Înscris: 26.01.2014

View PostMarianG, on 14 decembrie 2014 - 19:02, said:

si unde este lista cu numere prime?
Pentru ce? Nu-mi trebuie doar exponentii?

#8
Cy_Cristian

Cy_Cristian

    Active Member

  • Grup: Members
  • Posts: 1,845
  • Înscris: 22.02.2009
Prea tarziu pentru un "LE".
Cum traduci tu in cod cerinta asa?

Quote

• 1 ≤ numerele din secvenţă ≤ 1013


#9
aLexCM

aLexCM

    Active Member

  • Grup: Members
  • Posts: 1,079
  • Înscris: 26.01.2014

View PostCy_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
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,473
  • Înscris: 10.08.2005
acel i nu trebuie sa-l cresti dupa ce nu mai poti face impartiti exacte?

#11
aLexCM

aLexCM

    Active Member

  • Grup: Members
  • Posts: 1,079
  • Înscris: 26.01.2014

View PostCy_Cristian, on 14 decembrie 2014 - 19:39, said:

Prea tarziu pentru un "LE".
Cum traduci tu in cod cerinta asa?

Habar n-am. Daca mi-ai putea explica as fi foarte recunoscator.

Am incercat sa fac si debug insa nu a mers. Cand compilez programul mi se deschide consola insa nu-mi mai returneaza 0.

#12
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,473
  • Înscris: 10.08.2005

View PostaLexCM, on 14 decembrie 2014 - 19:37, said:

Pentru ce? Nu-mi trebuie doar exponentii?
pentru verificare, pentru debug, pentru teste, pentru dezvolatarea cunostintelor, etc

#13
aLexCM

aLexCM

    Active Member

  • Grup: Members
  • Posts: 1,079
  • Înscris: 26.01.2014

View PostMarianG, on 14 decembrie 2014 - 19:49, said:

acel i nu trebuie sa-l cresti dupa ce nu mai poti face impartiti exacte?

Ba da. Acum am observat. Trebuia sa-l pun in afara celui de-al doilea while.

#14
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,473
  • Înscris: 10.08.2005

View PostaLexCM, on 14 decembrie 2014 - 19:45, said:

-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.
si pentru 1042, ce faci?

#15
Cy_Cristian

Cy_Cristian

    Active Member

  • Grup: Members
  • Posts: 1,845
  • Înscris: 22.02.2009

View PostaLexCM, on 14 decembrie 2014 - 19:50, said:


Habar n-am. Daca mi-ai putea explica as fi foarte recunoscator.

Am incercat sa fac si debug insa nu a mers. Cand compilez programul mi se deschide consola insa nu-mi mai returneaza 0.
Ce tipuri de date stii tu ca exista in C? Si cand/la ce folosesc ele?

#16
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,473
  • Înscris: 10.08.2005

View PostaLexCM, on 14 decembrie 2014 - 19:50, said:

Habar n-am. Daca mi-ai putea explica as fi foarte recunoscator.
cum ai descrie cerinta in cuvinte

#17
aLexCM

aLexCM

    Active Member

  • Grup: Members
  • Posts: 1,079
  • Înscris: 26.01.2014

View PostCy_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

View PostMarianG, 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
Cy_Cristian

Cy_Cristian

    Active Member

  • Grup: Members
  • Posts: 1,845
  • Înscris: 22.02.2009
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

Neurochirurgie minim invazivă 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

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate