Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int primary(unsigned long);
  4. int* prime_multipliers(unsigned long, int*);
  5. unsigned long gcd_2(int*, int, int*, int);
  6. unsigned long gcd_array(unsigned long*,int);
  7. int main()
  8. {
  9. printf("Please enter the array : \n");
  10. int m;
  11. scanf("%d",&m);
  12. unsigned long* a = (unsigned long*)malloc(m * sizeof(unsigned long));
  13. for(int i = 0;i < m;i++)
  14. {
  15. unsigned long n1;
  16. scanf("%lu", &n1);
  17. a[i] = n1;
  18. }
  19. unsigned long k = gcd_array(a,m);
  20. printf("The gcd is %lu\n",k);
  21. }
  22.  
  23. int primary(unsigned long n1)
  24. {
  25. int tmp = 1;
  26. for(int i = 2;i < n1 && tmp == 1; i++)
  27. {
  28. if(n1 % i == 0)
  29. tmp = 0;
  30. }
  31. return tmp;
  32. }
  33. int* prime_multipliers(unsigned long n, int *len )
  34. {
  35. *len = 0;
  36. unsigned long n1 = n;
  37. int count = 1;
  38. int i = 2;
  39. while(n1 != 1)
  40. {
  41. if(primary(i) == 1)
  42. {
  43. if(n1 % i == 0)
  44. {
  45. while(n1 % i == 0)
  46. {
  47. n1 = n1/i;
  48. count++;
  49. }
  50. }
  51.  
  52. }
  53. i++;
  54. }
  55. int* a=(int*)malloc(count * sizeof(int));
  56. a[0] = 1;
  57. i = 2;
  58. int tmp = 1;
  59. while(n != 1)
  60. {
  61. if(primary(i) == 1)
  62. {
  63. if(n % i == 0)
  64. {
  65. while(n % i == 0)
  66. {
  67. n = n / i;
  68. a[tmp] = i;
  69. tmp++;
  70. }
  71. }
  72.  
  73. }
  74. i++;
  75. }
  76. *len = count;
  77. free(a);
  78. return a;
  79. }
  80. unsigned long gcd_2(int a1[], int len1, int a2[], int len2)
  81. {
  82. int max=0;
  83. if(len1>len2)
  84. {
  85. max=len1;
  86. }
  87. else
  88. max=len2;
  89. max*=max;
  90. int tmp = 0;
  91. int* a = (int*)malloc(max * sizeof(int));
  92. for(int k = 0;k < max; k++)
  93. {
  94. a[k] = 0;
  95. }
  96. for(int i=0;i<len1;i++)
  97. {
  98. for(int j=0;j<len2;j++)
  99. {
  100. if(a1[i]==a2[j])
  101. {
  102. a[tmp]=a1[i];
  103. tmp++;
  104. }
  105. }
  106. }
  107. int max1 = 1;
  108. for(int i = 0;i < max;i++)
  109. {
  110. if(a[i] > max1)
  111. {
  112. max1 = a[i];
  113. }
  114. }
  115. return max1;
  116. }
  117. unsigned long gcd_array(unsigned long data[],int n)
  118. {
  119. int n1 = data[0];
  120. unsigned long* a = (unsigned long*)malloc(n1 * sizeof(unsigned long));
  121. for(int i = 0;i < n1; i++)
  122. {
  123. a[i] = 0;
  124. }
  125. int tmp = 0;
  126. for(int i = 1;i < n1;i++)
  127. {
  128. if(n1 % i == 0)
  129. {
  130. a[tmp] = i;
  131. tmp++;
  132. }
  133. }
  134. a[tmp] = n1;
  135. unsigned long k = 0;
  136. int flag = 1;
  137. for(int i = tmp; i>= 0; i--)
  138. {
  139. flag = 1;
  140. for(int j = 1;j < n && flag == 1;j++)
  141. if(data[j] % a[i] != 0)
  142. {
  143. flag = 0;
  144. }
  145. if(flag == 1)
  146. {
  147. k = a[i];
  148. i = -1;
  149. }
  150. }
  151. return k;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement