Advertisement
a53

produs3

a53
Sep 24th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. #include <fstream>
  2.  
  3. using namespace std;
  4. ifstream f("produs3.in");
  5. ofstream g("produs3.out");
  6.  
  7. long long n,i,j,k,i1,j1,k1,d[22],t[16],c[12],p,e2[1000002],e3[1000002],e5[1000002],exp2,exp3,exp5;
  8. long long cod,sol,viz[10],x;
  9.  
  10. int main()
  11. {
  12. f >> n ;
  13. // calculez puterile lui 2,3 si 5 mai mici decat 1000000
  14. d[0]=1;
  15. i=0;
  16. while(d[i]<1000000){i++; d[i]=d[i-1]*2;}
  17. i--;
  18. t[0]=1;
  19. j=0;
  20. while(t[j]<1000000){j++; t[j]=t[j-1]*3;}
  21. j--;
  22. c[0]=1;
  23. k=0;
  24. while(c[k]<1000000){k++; c[k]=c[k-1]*5;}
  25. k--;
  26. // calculez numerele mai mici decat 1000000 ce sunt divizibile doar cu 2, 3 sau 5
  27. for(i1=0;i1<=i;i1++)
  28. for(j1=0;j1<=j;j1++)
  29. for(k1=0;k1<=k;k1++)
  30. {
  31. p=d[i1]*t[j1]*c[k1];
  32. if(p<1000000)
  33. {
  34. e2[p]=i1;
  35. e3[p]=j1;
  36. e5[p]=k1;
  37. }
  38. }
  39. // citesc numerele si formez exponentii cumulati ai lui 2, 3 si 5
  40. exp2=0;exp3=0;exp5=0;
  41. viz[0]=1;
  42. for( i=1 ; i<=n ; i++)
  43. {
  44. f >> x ;
  45. exp2=exp2+e2[x];
  46. exp3=exp3+e3[x];
  47. exp5=exp5+e5[x];
  48. cod=(exp2%2)*4+(exp3%2)*2+exp5%2;
  49. viz[cod]++;
  50. }
  51. // Numar perechile de coduri de acelasi tip care se pot forma, intre acestea fiind o secventa
  52. // cu proprietatea ceruta
  53. sol=0;
  54. for( i=0 ; i<=7 ; i++)
  55. sol=sol+viz[i]*(viz[i]-1)/2;
  56. g << sol ;
  57. return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement