Advertisement
a53

prim023_eficienta

a53
Jan 10th, 2018
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3. ifstream f("prim023.in");
  4. ofstream g("prim023.out");
  5. int n,i,j,NrCif,p,u,x,t,sol[32001],prim[3500];
  6. bool EstePrim;
  7.  
  8. int main()
  9. {
  10. sol[1]=1,sol[2]=0,NrCif=0;
  11. for(i=2;i<=32000;++i) /// prim[] va memora numerele prime pana la sqrt(1000000000) care-i aprox. 31623
  12. if(sol[i]==0)
  13. {
  14. prim[++NrCif]=i,j=i+i;
  15. while(j<=32000)
  16. sol[j]=1,j+=i; /// sol[j]=1 daca nu e numar prim si sol[j]=0 daca e numar prim
  17. }
  18. f>>n;
  19. u=0,p=0; /// u=nr de 1, iar p=nr de numere prime
  20. for(i=1;i<=n;++i) /// Citesc sirul de numere
  21. {
  22. f>>x;
  23. if(x==1) /// Daca e 1 il contorizez
  24. ++u;
  25. else /// altfel verific daca e prim si-l contorizez
  26. {
  27. EstePrim=true,j=1; /// presupunem ca x Este Prim
  28. while(prim[j]*prim[j]<=x&&EstePrim)
  29. if(x%prim[j]==0) /// Verificam daca x e prim (daca nu e, atunci lui EstePrim i se atribuie false
  30. {
  31. EstePrim=false;
  32. break;
  33. }
  34. else
  35. ++j;
  36. if(EstePrim) /// Daca x e numar prim
  37. ++p;
  38. }
  39. }
  40. if(p==0)
  41. g<<0;
  42. else
  43. if(u==0)
  44. g<<p;
  45. else
  46. {
  47. sol[1]=p,NrCif=1; /// sol <- p
  48. for(i=1;i<=u;++i) /// Calculez p*2^u si pun rezultatul in sol[]
  49. {
  50. t=0;
  51. for(j=1;j<=NrCif;++j) /// sol <- sol*2
  52. x=(sol[j]*2+t)%10,t=(sol[j]*2+t)/10,sol[j]=x;
  53. while(t>0) /// Daca avem transport
  54. sol[++NrCif]=t%10,t/=10;
  55. }
  56. for(i=NrCif;i>=1;--i) /// Afisez rezultatul
  57. g<<sol[i];
  58. }
  59. return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement