fork download
  1. #include <bits/stdc++.h>
  2. #define X first
  3. #define Y second
  4. #define ll long long
  5. #define pii pair<int, int>
  6. #define all(x) (x).begin(), (x).end()
  7. #define piii pair<int, pii>
  8. #define tp tuple<int,int,int>
  9. #define oo (ll) 1e18
  10. #define LOG_MAX 18
  11. using namespace std;
  12. #define MAXN 10000010
  13. #define MOD 1000000007
  14. #define base 311
  15. int n,prime[MAXN],cnt[MAXN],valid[MAXN];
  16. vector<int>cprime;
  17. void sieve(){
  18. for(int i=2;i<=1e7;i++){
  19. if(prime[i]) continue;
  20. prime[i] = i;
  21. cprime.push_back(i);
  22. for(int j=2*i;j<=1e7;j+=i) prime[j] = i;
  23. }
  24. }
  25. ll power(int a,int n){
  26. if(n == 0) return 1;
  27. if(n == 1) return a;
  28. ll tmp = power(a , n / 2);
  29. if(n % 2 == 0) return ((tmp * tmp) % MOD );
  30. return ((tmp * tmp) % MOD * a) % MOD;
  31. }
  32. signed main(){
  33. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  34. //freopen("barnpainting.inp","r",stdin);
  35. //freopen("barnpainting.out","w",stdout);
  36. cin >> n;
  37. sieve();
  38. for(int i=1;i<=n;i++){
  39. int m; cin>>m;
  40. unordered_map<int,int>mp;
  41. for(int i=1;i<=m;i++){
  42. int x; cin>>x;
  43. while(x != 1){
  44. mp[prime[x]]++;
  45. x/=prime[x];
  46. }
  47. }
  48. for(auto [primes , sz] : mp){
  49. if(i == 1) cnt[primes] = sz;
  50. else cnt[primes] = min(cnt[primes],sz);
  51. valid[primes]++;
  52. }
  53. }
  54. ll ans = 1;
  55. for(auto c : cprime){
  56. if(valid[c] != n) cnt[c] = 0;
  57. ans = (ans * power(c,cnt[c])) % MOD;
  58. }
  59. cout << ans ;
  60. return 0;
  61. }
  62. /*
  63. 4 2
  64. 1 2 3 4
  65.  
  66. */
  67.  
Success #stdin #stdout 0.23s 47424KB
stdin
Standard input is empty
stdout
1