fork download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4.  
  5. class Codechef
  6. {
  7. public static void main (String[] args) throws java.lang.Exception
  8. {
  9. // your code goes here
  10. Scanner sc=new Scanner(System.in);
  11. int t=sc.nextInt();
  12. while(t-->0){
  13. int n=sc.nextInt();
  14. int y=sc.nextInt();
  15. int[]arr=new int[n];
  16. for(int i=0;i<n;i++){
  17. arr[i]=sc.nextInt();
  18. }
  19. //gcd==y
  20. int gcd=gcdy(arr,y);
  21. System.out.println(gcd);
  22. }
  23. sc.close();
  24. }
  25. public static int gcdy(int[]arr,int y){
  26. int max=Integer.MIN_VALUE;
  27. for(int num:arr) max=Math.max(max,num);
  28. int []u=new int[max+1];
  29. u[1]=arr.length;
  30. for(int i=2;i<=max;i++){
  31. int cnt=0;
  32. for(int ar:arr){
  33. if(ar%i==0){
  34. cnt++;
  35. }
  36. }
  37. u[i]=cnt;
  38. }
  39. int []mul=new int[max+1];
  40. int []g=new int[max+1];
  41. for(int i=1;i<=max;i++){
  42. mul[i]=u[i]*(u[i]-1)/2; // how many pairs are divisible by i;
  43. }
  44. g[max]=mul[max];
  45. for(int i=max-1;i>=1;i--){
  46. int mu=1,multiple=0;
  47. for(int j=2*i;j<=max;j+=i){
  48. if(j<=max){
  49. multiple+=g[j];
  50. }
  51. mu++;
  52. }
  53. g[i]=mul[i]-multiple;
  54. }
  55. return g[y];
  56. }
  57. }
Success #stdin #stdout 0.15s 56584KB
stdin
1
5 2
2 4 6 8 10
stdout
9