Advertisement
a53

B_o_m_b_o_a_n_e_4

a53
Dec 29th, 2018
333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. #include <fstream>
  2. #define ULL unsigned long long int
  3. #define NMax 40
  4. using namespace std;
  5. ofstream g("bomboane4.out");
  6. typedef int Huge[NMax+3];
  7.  
  8. void AtribValue(Huge H,ULL X) /// H <- X
  9. {
  10. H[0]=0;
  11. while (X)
  12. ++H[0],H[H[0]]=X%10,X/=10;
  13. }
  14.  
  15.  
  16. void MultHuge(Huge A, Huge B, Huge C)
  17. /* C <- A x B */
  18. { int i,j,T=0;
  19.  
  20. C[0]=A[0]+B[0]-1;
  21. for (i=1;i<=A[0]+B[0];) C[i++]=0;
  22. for (i=1;i<=A[0];i++)
  23. for (j=1;j<=B[0];j++)
  24. C[i+j-1]+=A[i]*B[j];
  25. for (i=1;i<=C[0];i++)
  26. { T=(C[i]+=T)/10;
  27. C[i]%=10;
  28. }
  29. if (T) C[++C[0]]=T;
  30. }
  31.  
  32. ULL Divide(Huge A,ULL X) /// A <- A/X si intoarce A%X
  33. {
  34. ULL R=0;
  35. for(int i=A[0];i;--i)
  36. A[i]=(R=10*R+A[i])/X,R%=X;
  37. while(!A[A[0]]&&A[0]>1)
  38. --A[0];
  39. return R;
  40. }
  41.  
  42. void Subtract(Huge A,Huge B) /// A <- A-B
  43. {
  44. ULL T=0;
  45. for(int i=B[0]+1;i<=A[0];)
  46. B[i++]=0;
  47. for(int i=1;i<=A[0];++i)
  48. A[i]+=(T=(A[i]-=B[i]+T)<0)
  49. ?10:0;
  50. while(!A[A[0]])
  51. --A[0];
  52. }
  53.  
  54. void Afisare(Huge H)
  55. {
  56. for(int i=H[0];i>0;--i)
  57. g<<H[i];
  58. g<<'\n';
  59. }
  60.  
  61. void cmmmcM(ULL a,ULL b)
  62. {
  63. ULL r;
  64. Huge A,B,P;
  65. AtribValue(A,a); /// A <- a
  66. AtribValue(B,b); /// B <- a
  67. MultHuge(A,B,P); /// P <- A*B (adica P=a*b)
  68. while(b!=0)
  69. r=a%b,a=b,b=r;
  70. Divide(P,a);
  71. Huge UNU;
  72. AtribValue(UNU,1); /// UNU <- 1
  73. Subtract(P,UNU);
  74. Afisare(P);
  75. }
  76.  
  77. int main()
  78. {
  79. ULL p,q;
  80. ifstream f("bomboane4.in");
  81. f>>p>>q;
  82. f.close();
  83. cmmmcM(p,q);
  84. return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement