Advertisement
a53

prim023

a53
Jan 9th, 2018
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.03 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cmath>
  3. #define BAZA 100000
  4. using namespace std;
  5. typedef int Huge[1000];
  6. FILE *g=fopen("prim023.out","w+");
  7.  
  8. bool prim(int n)
  9. {
  10. if(n==2||n==3)
  11. return true;
  12. else
  13. if(n==1||n==0)
  14. return false;
  15. if(n%2==0||n%3==0)
  16. return false;
  17. for(int k=1;6*k-1<=sqrt(n);++k)
  18. if(n%(6*k-1)==0||n%(6*k+1)==0)
  19. return false;
  20. return true;
  21. }
  22.  
  23. void DoiLaN(Huge A,int n) /// A <- 2^n
  24. {
  25. A[0]=1,A[1]=1; /// A <- 1 (adica 2^0)
  26. if(n==0)
  27. return;
  28. int p=0,T,C;
  29. do
  30. {
  31. T=0; /// T retine cifra de transport
  32. for(int i=1;i<=A[0];++i)
  33. {
  34. C=(A[i]<<1)+T; /// C <- A[i]*2 (Calculam cifra curenta C din A[i])
  35. T=C/BAZA; /// Calculam transportul
  36. A[i]=C%BAZA; /// si cifra curenta din A[i]
  37. }
  38. if(T!=0) /// Daca exista cifra de transport, in A ne trebuie inca un element
  39. A[++A[0]]=T; /// si in acest element punem cifra de transport
  40. ++p; /// Am efectuat o inmultire cu 2, puterea p creste
  41. } while(p!=n); /// pana cand puterea p este egala cu exponentul n
  42. }
  43.  
  44. void Mult(Huge H,int X) /// H <- H*X
  45. { int i;
  46. unsigned long long T=0;
  47. for (i=1;i<=H[0];i++)
  48. { H[i]=H[i]*X+T;
  49. T=H[i]/BAZA;
  50. H[i]=H[i]%BAZA;
  51. }
  52. while (T) /// Cat timp exista transport
  53. { H[++H[0]]=T%BAZA;
  54. T/=BAZA;
  55. }
  56. }
  57.  
  58. void Afisez(Huge X)
  59. {
  60. fprintf(g,"%d",X[X[0]]);
  61. for(int i=X[0]-1;i>0;--i)
  62. fprintf(g,"%05d",X[i]);
  63. fprintf(g,"\n");
  64. }
  65.  
  66. int main()
  67. {
  68. int n,x,p=0,u=0;
  69. FILE *f=fopen("prim023.in","r");
  70. fscanf(f,"%d ",&n);
  71. for(int i=1;i<=n;++i)
  72. {
  73. fscanf(f,"%d ",&x);
  74. if(x==1)
  75. ++u;
  76. else
  77. if(prim(x))
  78. ++p;
  79. }
  80. fclose(f);
  81. if(u==0||u==n||p==0||p==n)
  82. {
  83. fprintf(g,"%d\n",p);
  84. return 0;
  85. }
  86. Huge sol;
  87. DoiLaN(sol,u);
  88. Mult(sol,p);
  89. Afisez(sol);
  90. fclose(g);
  91. return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement