Advertisement
Zeinab_Hamdy

Untitled

Jul 11th, 2024 (edited)
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define nl "\n"
  4. #define fi first
  5. #define se second
  6. #define pb push_back
  7. #define ll long long
  8. #define RV return void
  9. #define sz(x) int(x.size())
  10. #define all(v) v.begin(), v.end()
  11. #define rall(v) v.rbegin(), v.rend()
  12. #define fixed(n) fixed << setprecision(n)
  13. #define cin(v) for(auto&x:v) cin >> x;
  14. #define cout(v) for(auto&x:v) cout << x << " ";
  15. void files(){
  16.     #ifndef ONLINE_JUDGE
  17.        freopen("input.txt", "r", stdin);
  18.        freopen("output.txt", "w", stdout);
  19.     #endif
  20. }
  21.  
  22.  
  23. const ll mod = (ll) (1e9+7);
  24.  
  25. ll up(ll a , ll b ){
  26.     return (( a % mod ) * ( b % mod) ) %mod;
  27. }
  28.  
  29. ll Binex(ll a , ll b ){
  30.     ll ret=1;
  31.     while(b){
  32.         if(b & 1 ) ret = up( ret, a);
  33.         a= up(a , a );
  34.         b>>=1;
  35.     }
  36.     return ret;
  37. }
  38.  
  39.  
  40. void solve(){
  41.  
  42.     ll n , x;
  43.     cin >> n >> x;
  44.  
  45.     vector < ll > v(n);
  46.     map < ll , ll > freq , mp;
  47.     for(auto& q : v){
  48.         cin >> q;
  49.         freq[q]++;
  50.     }
  51.  
  52.     for(int i =1 ; i * i <= x ; i++){
  53.         if(x % i ==0){
  54.             mp[i] += freq[i];
  55.             if(i * i != x)
  56.                 mp[x/i]+=freq[x/i];
  57.         }
  58.     }
  59.     ll cnt=0 , ans=0 , c=0;
  60.     for(auto& [f,s] : mp) cnt +=s;
  61.  
  62.     for(auto& [f,s] : mp){
  63.         if(!s) continue;
  64.         for(auto& [f2,s2] : mp){
  65.             if(f2 >= f) break;
  66.             if(!s2) continue;
  67.  
  68.             if(f % f2 !=0  ){
  69.                 ll temp =((Binex(2,s) -1)* (Binex(2,s2)-1) ) % mod * (Binex(2 ,max(0ll ,  cnt - s -s2 - freq[x])) );
  70.                 temp %= mod;
  71.  
  72.                 ans +=  temp;
  73.                 ans %= mod;
  74.                 // cout << f << " " << f2 << " " << temp << nl;
  75.                   if(Binex(2,s) -1)
  76.                     c++;
  77.             }
  78.         }
  79.     }
  80.  
  81.     ans += up(Binex(2 , cnt - freq[x]) -1, Binex(2 , freq[x]) - 1 );
  82.     ans %= mod;
  83.     ans += Binex(2 , freq[x]) - 1;
  84.     ans %= mod;
  85.  
  86.     if(c > 1) ans -=c-1;
  87.  
  88.     ans += mod;
  89.     ans %= mod;
  90.  
  91.     // cout << c << " " ;
  92.  
  93.     cout <<  ans << nl;
  94.  
  95.    
  96.    
  97.    
  98. }      
  99.  
  100. int main(){
  101.     ios_base::sync_with_stdio(false);
  102.     cin.tie(nullptr);
  103.     cout.tie(nullptr);
  104.                            
  105.     //  files();
  106.    
  107.     int testCase=1;
  108.         cin >> testCase ;
  109.     for(int i=1 ; i <= testCase ; i++){
  110.         // cout << "Case "<< i <<": " << nl;
  111.         solve();
  112.     }
  113.  
  114.     return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement