Saleh127

Light oj(LO) 1024

Mar 18th, 2021
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.00 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define test int t; cin>>t; for(int cs=1;cs<=t;cs++)
  5. #define maX 1000008
  6.  
  7. ll f[10002];
  8. ll ans[10000];
  9.  
  10. vector<ll>p;
  11. bool marked[maX];
  12.  
  13. void sieve()
  14. {
  15. marked[0]=1;
  16. marked[1]=1;
  17. for(ll i=4; i<=maX; i+=2)
  18. {
  19. marked[i]=1;
  20. }
  21. for(ll i=3; i<=maX; i+=2)
  22. {
  23. if(marked[i]==0)
  24. {
  25. for(ll j=i*i; j<=maX; j+=i+i)
  26. {
  27. marked[j]=1;
  28. }
  29. }
  30. }
  31. p.push_back(2);
  32. for(ll i=3; i<=maX; i+=2)
  33. {
  34. if(marked[i]==0)
  35. {
  36. p.push_back(i);
  37. }
  38. }
  39. }
  40.  
  41. ll multi(ll x,ll res_size)
  42. {
  43. ll carry = 0;
  44.  
  45. for (ll i=0; i<res_size; i++)
  46. {
  47. ll prod = ans[i] * x + carry;
  48. ans[i] = prod % 10;
  49. carry = prod/10;
  50. }
  51.  
  52. while (carry)
  53. {
  54. ans[res_size] = carry%10;
  55. carry = carry/10;
  56. res_size++;
  57. }
  58. return res_size;
  59. }
  60.  
  61. string multi(string nums1,string nums2)
  62. {
  63. ll l1 = nums1.size();
  64. ll l2 = nums2.size();
  65.  
  66. ll i,j;
  67.  
  68. string str( l1 + l2, '0');
  69.  
  70. for(i=l1-1; i>= 0; i--)
  71. {
  72. for(j=l2-1; j>= 0; j--)
  73. {
  74. ll p = (nums1[i]-'0')*(nums2[j]-'0') + (str[i+j+1]-'0');
  75. str[i+j+1] = p%10 + '0';
  76. str[i+j] += p/10;
  77. }
  78. }
  79. for(i=0; i<l1+l2; i++)
  80. {
  81. if(str[i]!= '0')
  82. {
  83. return str.substr(i);
  84. }
  85. }
  86. return "0";
  87. }
  88.  
  89. int main()
  90. {
  91. ios_base::sync_with_stdio(0);
  92. cin.tie(0);
  93. cout.tie(0);
  94.  
  95.  
  96. sieve();
  97.  
  98. test
  99. {
  100. memset(f,0,sizeof(f));
  101.  
  102. ll n,m,i,j,k,l;
  103.  
  104. cin>>n;
  105.  
  106. for(i=0; i<n; i++)
  107. {
  108. cin>>m;
  109.  
  110. for(j=0; j<p.size() && p[j]*p[j]<=m; j++)
  111. {
  112. k=0;
  113. if(m%p[j]==0)
  114. {
  115. while(m%p[j]==0)
  116. {
  117. m/=p[j];
  118. k++;
  119. }
  120.  
  121. f[p[j]]=max(f[p[j]],k);
  122. }
  123. }
  124.  
  125. if(m>1)
  126. {
  127. f[m]=max(f[m],1LL);
  128. }
  129. }
  130.  
  131. string x="1";
  132.  
  133. for(i=1; i<=10000; i++)
  134. {
  135. if(f[i]>0)
  136. {
  137. m=pow(i,f[i]);
  138.  
  139. string y=to_string(m);
  140.  
  141. x=multi(x,y);
  142. }
  143. }
  144.  
  145. cout<<"Case "<<cs<<": "<<x<<endl;
  146.  
  147. ///gun kore proti digit alada index ay raikha
  148.  
  149. /*
  150. memset(ans,0,sizeof(ans));
  151. ans[0]=1;
  152. l=1;
  153.  
  154. for(i=1; i<=10000; i++)
  155. {
  156. if(f[i]!=0)
  157. {
  158. m=pow(i,f[i]);
  159. l=multi(m,l);
  160. }
  161. }
  162.  
  163. cout<<"Case "<<cs<<": ";
  164.  
  165. for(i=l-1; i>=0; i--)
  166. {
  167. cout<<ans[i];
  168. }
  169. cout<<endl;
  170. */
  171.  
  172. }
  173.  
  174. return 0;
  175. }
  176.  
Advertisement
Add Comment
Please, Sign In to add comment