Pagini: 1 2 3 [4] 5 6 7   În jos
  Imprimă  
Ajutor Subiect: 023 Numere Prime  (Citit de 77369 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
xtreme
De-al casei
***

Karma: -26
Deconectat Deconectat

Mesaje: 118



Vezi Profilul
« Răspunde #75 : Decembrie 28, 2008, 22:40:49 »

fii atent sa faci ciurul pana la 1.500.000 intrucat cel de-al 100.000-lea nr prim e undeva la 1.300.000 Wink
si restul intra in long long (n-ul)
bafta Smile
am fakut ciurul de 2000000 nu pot sa inteleg ce nu merge...este n-u mai mare ca si 2000000?
« Ultima modificare: Decembrie 28, 2008, 22:58:06 de către raziel » Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #76 : Decembrie 28, 2008, 23:07:17 »

Eu am facut ciurul pana la 3 milioane, dar nu cred ca poate atinge mai mult de 2 milioane, dupa cum zicea in postul de mai sus
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #77 : Decembrie 28, 2008, 23:09:10 »

ai grija cum faci ciurul...mai cauta si alte greseli... insa daca faci corect 2 000 000 e mai mult decat suficient...
« Ultima modificare: Decembrie 29, 2008, 00:13:26 de către Emanuel Cinca » Memorat
xtreme
De-al casei
***

Karma: -26
Deconectat Deconectat

Mesaje: 118



Vezi Profilul
« Răspunde #78 : Decembrie 28, 2008, 23:11:05 »

cat ar trebui sa imi dea pentru k=100.000?
am fakut cu ciurul in 2 moduri diferite si tot 20 de puncte
Cod:
#include<iostream.h>    
#include<fstream.h>

int main()
    {
     unsigned char v[2000000];long int i,j,k,nrprime=0; 
     fstream f("prim.in",ios::in),g("prim.out",ios::out); 
     f>>k; 
     for(i=1;i<=2000000;i++) 
              v[i]='0'; 
     for(i=2;i<=2000000;i++) 
              if(v[i]=='0') 
                     { 
                     if(nrprime!=k) 
                            { 
                            nrprime++; 
                            for(j=i+i;j<=2000000;j+=i) 
                                       v[j]='2'; 
                            } 
                      else     
                             for(j=i+i;j<=2000000;j+=i) 
                                        if(v[j]=='0')   
                                               v[j]='1'; 
                      } 
     for(i=2;i<=2000000;i++) 
              if(v[i]=='1') 
                           {g<<i;break;} 
     f.close();g.close(); 
     return 0; 
     } 
[\code]       
                           
 
« Ultima modificare: Decembrie 29, 2008, 00:02:51 de către raziel » Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #79 : Decembrie 29, 2008, 00:05:22 »

De ce marchezi si cu 1 si cu 2?  Confused
Memorat
xtreme
De-al casei
***

Karma: -26
Deconectat Deconectat

Mesaje: 118



Vezi Profilul
« Răspunde #80 : Decembrie 29, 2008, 00:08:36 »

De ce marchezi si cu 1 si cu 2?  Confused
cu '0' nr prime cu '2' divizorii primelor k nr prime si cu '1' divizorii restu nr. prime
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #81 : Decembrie 29, 2008, 00:13:05 »

1689274677841 imi da mie...

http://infoarena.ro/job_detail/161860?action=view-source eu de obicei asa implementez ciurul... asa am facut si la problema asta si a mers... merge si cum ai facut tu... dar nu inteleg sensul sa marchezi si cu 2 Huh

1689243484681 iti da cumva tie?
« Ultima modificare: Decembrie 29, 2008, 00:19:52 de către Emanuel Cinca » Memorat
xtreme
De-al casei
***

Karma: -26
Deconectat Deconectat

Mesaje: 118



Vezi Profilul
« Răspunde #82 : Decembrie 29, 2008, 00:31:31 »

1689274677841 imi da mie...

http://infoarena.ro/job_detail/161860?action=view-source eu de obicei asa implementez ciurul... asa am facut si la problema asta si a mers... merge si cum ai facut tu... dar nu inteleg sensul sa marchezi si cu 2 Huh

1689243484681 iti da cumva tie?
nu imi da atat.....nu kred ka e buna ideea mea....eu am crezut ca daka marchez in vectoru de 2 milioane cu '0' nr prime si cu '2' divizori primelor k nr prime si cu '1' restu...e evident ca indicele care e cel mai mic si care in v de indice contine '1' acela e nr cautat
 
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #83 : Decembrie 29, 2008, 00:37:33 »

ai pe paginile astea un indiciu foarte important despre care este numarul cautat... e al (k+1)-lea numar prim la patrat.. credeam ca tu afisezi al k-lea numar prim la patrat... Very Happy

asa problema se reduce sa faci ciurul si sa cauti al k-lea numar prim Smile
Memorat
xtreme
De-al casei
***

Karma: -26
Deconectat Deconectat

Mesaje: 118



Vezi Profilul
« Răspunde #84 : Decembrie 29, 2008, 00:51:13 »

ai pe paginile astea un indiciu foarte important despre care este numarul cautat... e al (k+1)-lea numar prim la patrat.. credeam ca tu afisezi al k-lea numar prim la patrat... Very Happy

asa problema se reduce sa faci ciurul si sa cauti al k-lea numar prim Smile
.
mersi,mi-am dat seama atunci cand mi-ai zis rezultatul pentru k=100000
Memorat
catalin93
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 13



Vezi Profilul
« Răspunde #85 : Decembrie 29, 2008, 01:39:58 »

De ce marchezi si cu 1 si cu 2?  Confused
cu '0' nr prime cu '2' divizorii primelor k nr prime si cu '1' divizorii restu nr. prime

de ce nu iti faci un vector de bool si fiecare numar compus (neprim) il marchezi cu true... si astfel fiind initializat global pe false ai numere prime Smile
mie asa mi se pare cel mai simplu Smile
Memorat
shnako
Client obisnuit
**

Karma: 3
Deconectat Deconectat

Mesaje: 50



Vezi Profilul
« Răspunde #86 : Ianuarie 14, 2009, 14:04:06 »

Imi puteti spune careva de ce iau Wrong answer pe ultimele 5 teste ? Am mai facut un program si al 100 000lea numar prim dadea undeva sub 1 300 000 deci aia e ok.

Cod:
#include <stdio.h>
#include <math.h>
long k, i, n=1300000, x;
bool v[1300000];
void prim(void)
{
for (i=3;i<=n;i=i+2)
v[i]=1;
for (i=3;i<=sqrt(n);i=i+2)
   for (register long t=i;t*i<=n;t++)
    v[i*t]=0;
}
int find(long k)
{
long t=1;
for (register int i=3;i<=n;i++)
if (v[i])
      {
    t++;
      if (t==k+1)
      return i;
      }
}
int main(void)   
{
freopen("prim.in", "r", stdin);
freopen("prim.out", "w", stdout);
scanf("%ld", &k);
prim();
x=find(k);
printf("%ld", x*x);
fcloseall();
return 0;
}

P.S.: E ceva in neregula cu declaratia long long int k, i, n=1300000, x; ? Ca daca incerc sa le declar asa imi spune Too many types in declaration.
La fel imi spune si daca nu mai scriu int, doar long long.
« Ultima modificare: Ianuarie 14, 2009, 14:40:53 de către Schnakovszki Vlad » Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #87 : Ianuarie 14, 2009, 17:00:37 »

Cod:
printf("%lld", x*x);

si declara-le long long... eu am declarat chiar unsigned long long pentru orice eventualitate, atunci cand am facut problema...
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #88 : Ianuarie 16, 2009, 20:11:09 »

La mine pe g++ 4.3 de linux, aproximativ la fel cu cel de pe infoarena care e 4.2.3, programul tau compileaza si cu long long. Tu compilezi cumva cu Borland? Borland-ul nu e standard, si nu accepta long long, de aceea crede probabil ca e o eroare la tine.
Memorat
shnako
Client obisnuit
**

Karma: 3
Deconectat Deconectat

Mesaje: 50



Vezi Profilul
« Răspunde #89 : Ianuarie 18, 2009, 10:15:03 »

L-am trimis cu toate ca Borlandu zicea ca am eroare Smile Am luat 100 de puncte, mersi Winner 1st place. Daca am ajuns sa nu mearga programu din cauza lui Borland inseamna ca am inghitit destul Silenced. Care ziceti ca e cel mai bun editor/compilator ? Si eventual un link pentru el  Think Thanks Very Happy
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #90 : Ianuarie 18, 2009, 12:59:54 »

http://infoarena.ro/schimbare-borland/pachet
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #91 : Ianuarie 18, 2009, 19:20:05 »

eu votez cu rhide Whistle
http://infoarena.ro/djgpp-instalarea-de-la-a-la-z
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #92 : Ianuarie 18, 2009, 22:01:50 »

@emanuel

DJGPP este mult mai vechi, deci si mai indepartat standardului decat MINGW. Nu de putine ori unele programe care compilau cu DJGPP nu compilau cu gcc pe linux, si invers, fapt care mergea cu MINGW. De asemenea, RHIDE, desi este mai asemanator Borland-ului, are mult mai multe buguri, si chiar sa intampla sa crape cu totul, fara sa iti salveze sursa, MINGW Studio sau Dev-Cpp nefacand asta.


Eu personal l-as sfatui pe Vlad sa foloseasca Code Blocks, un mediu de altfel folosit si testat cu succes de mine in ultimii aproximativ 2 ani, atat pe windows cat si pe linux, neavand absolut nici o problema cu el. Compilatorul poate fi setat individual, putand sa compileze chiar si cu Borland, iar editorul este foarte flexibil, poti schimba aproape orice la el, poti seta comenzi de compilare, de rulare, etc, lucruri care nu se pot face in MINGW Developer Studio.

Este alegerea ta ce vrei sa folosesti Smile
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #93 : Ianuarie 19, 2009, 00:16:40 »

Incercati sa ramaneti la subiect. Sunt destule topicuri pe forum unde se discuta despre editoare/compilatoare.
Memorat

Am zis Mr. Green
dushmi
Nu mai tace
*****

Karma: 130
Deconectat Deconectat

Mesaje: 472



Vezi Profilul
« Răspunde #94 : Februarie 05, 2009, 17:11:55 »

am incercat sa pregenerez primele 100000 de nr prime... dar nu pot sa trimit programul pentru ca are cam 670 KB si maximul admis e 256 :O...
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #95 : Februarie 05, 2009, 18:41:07 »

Citat
am incercat sa pregenerez primele 100000 de nr prime... dar nu pot sa trimit programul pentru ca are cam 670 KB si maximul admis e 256 :O...

nu merge fiindca nu se rezolva astfel... incearca sa-ti invingi lenea si citeste threadul acesta... Smile
Memorat
LowArmour
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #96 : Martie 09, 2009, 13:15:50 »

Pentru sursa de mai jos imi da la ultimele 5 teste : Killed by signal 11(SIGSEGV).
Unde este problema?
PS: am folosit numarul 1318699 pt ca este al 100 000 numar prim.
Cod:
#include <stdio.h>
char iprim [1318699];
int k;
long int x;
void citire ()
{
scanf("%d",&k);}
void prim (int k)
{
long int i,j;
int nr=0;
for(i=2;i<=1318699;i++)
    if(nr<k){
if(!iprim[i ]){
      x=i;
      ++nr;
      for(j=i*i;j<=1318699;j+=i)
iprim[j]=1;}}
else break;
}
int main ()
{
freopen ("prim.in", "r", stdin);
freopen ("prim.out", "w", stdout);
citire();
prim(k+1);
printf("%ld", x*x);
return 0;}

Foloseste tag-ul [ code ] !
« Ultima modificare: Martie 09, 2009, 13:21:43 de către Paul-Dan Baltescu » Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #97 : Martie 09, 2009, 13:23:07 »

Rezultatul este de tip long long.

Nu mai posta cod ca sa-ti caute lumea greselile. Testeaza-ti singur.
Memorat

Am zis Mr. Green
LowArmour
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #98 : Martie 09, 2009, 17:14:09 »

Ok am inteles. Dar ma gandeam ca daca aflu acum care e greseala, pe viitor cand va aparea aceeasi eroare voi sti ce sa fac.
De testat... l-am testat mai mult timp decat l-am conceput... sunt unele greseli care nu ai cum sa le aflii singur. Wink.
Am corectat acum si vad ca imi da aceeasi eroare, in fine voi incerca din nou sa vad daca pot sa rezolv.
Multumesc.
« Ultima modificare: Martie 09, 2009, 17:24:36 de către Trailescu Bogdan Marius » Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #99 : Martie 09, 2009, 17:35:43 »

Sunt 3 erori in sursa ta:

  • Vectorul tau trebuie declarat de marime 1318700, deoarece in C daca aloci un array de dimnesiune N poti accesa elemente cu indicii cuprinsi intre 0 si N-1.
  • Rezultatul afisat trebuie sa fie de tipul long long - poti sa faci un cast la printare: printf("%lld\n", ((long long)x) * x);
  • In forul in care marchezi multiplii unui numar prim nu trebuie sa incepi de la i*i deoarece aceasta valoare iese din int. E de ajuns sa pornesti de la i Wink
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
Pagini: 1 2 3 [4] 5 6 7   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines