Advertisement
a53

Cvintete

a53
Jan 2nd, 2022
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. #include <fstream>
  2. #define M 1000000007
  3. #include <math.h>
  4. #define ll long long
  5. #define N 25000
  6. #define P 1235789
  7. using namespace std;
  8. ll n,d,k,i,x,a,b,c,w,sol;
  9. ll z,m,j,e,nr,dc,y,l,u,h,ma,mb;
  10. ll di[N],f[N],pp[N],v[P];
  11.  
  12. ll gcd( ll A, ll B)
  13. {
  14. ll r = A % B;
  15. while(r != 0)
  16. {
  17. A = B;
  18. B = r;
  19. r = A % B;
  20. }
  21. return B;
  22. }
  23.  
  24. int main()
  25. {
  26. ifstream cin("cvintete.in");
  27. ofstream cout("cvintete.out");
  28. ios_base::sync_with_stdio(false);
  29. cin.tie(0);
  30.  
  31. cin >> n >> d;
  32. m = 0;
  33. for(i = 1; i <= n; i++){
  34. cin >> x;
  35. f[x]++;
  36. if(x > m) m = x;
  37. }
  38. for(i = 1; i <= m; i++)
  39. {
  40. if((d % i == 0)and(f[i] > 0)){
  41. k++;
  42. di[k] = i;
  43. }
  44. pp[i] = i*i;
  45. v[pp[i]%P] = i;
  46. }
  47.  
  48. for(i = 1; i <= k-2; i++){
  49. a = di[i];
  50. for(j = i+1; j <= k-1; j++){
  51. b = di[j];
  52. e = a * b;
  53. if(d % e == 0){
  54. c = d / e;
  55. if(c > b)
  56. if(c <= m)
  57. if(f[c] > 0){
  58. nr = f[a] * f[b] * f[c];
  59. w = c * c;
  60. dc = gcd( a, b );
  61. if(w % dc == 0){
  62. l = (ll)sqrt(w / b);
  63. for(u = 1; u <= l; u++)
  64. if((w - b*pp[u]) % a == 0){
  65. z = (w - b*pp[u]) / a;
  66. h = v[z % P];
  67. if(h * h == z)
  68. if((h != u)and(h <= m))
  69. sol += nr * f[u] * f[h];
  70. }
  71. }
  72. }
  73. }
  74. }
  75. }
  76. cout << sol % M << endl;
  77. return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement