有n个格子,每个格子里有一个数,1,2,3,4...n

牛牛放出无穷只青蛙。
第一只青蛙的路线是:1->2->4->8->16->....
第二只青蛙的路线是:1->3->9->27->81->....
第三只青蛙的路线是:1->5->25->125....
第四只青蛙的路线是:1->7->49........
。。。。。。
用数学语言描述,第i只青蛙的路线是首项为1,公比为p(i)的等比数列,其中p(i)代表第i个素数。
当青蛙跳到一个格子上,如果这个格子上面有一个数,青蛙就会把这个数吃掉。
牛牛想知道,所有没有被吃掉的数的lcm(最小公倍数 ,Least common multiple)是多少?
由于这个lcm可能非常大,请输出它对1e9+7取模的值。

#include <bits/stdc++.h>
using namespace std;
const int maxx = 160000010,mode = 1e9 +7;
int prime[10001000];
int v[maxx];
int cnt = 0;
//线性筛
void xxs(int n){
    for(int i = 2; i < n; i++){
        if(!v[i]) {v[i] = i; prime[++cnt] = i;}
        for(int j = 1; j <= cnt; j++){
            if(prime[j] > v[i] || i*prime[j] > n) break;
            v[i*prime[j]] = prime[j];
        }
    }
}

int main(){
    int n;
    cin >> n;
    xxs(n);
    long long t,ans = 1;
    if(n < 6) cout<<"empty"<<endl;
    else{
        for(int i =1; i <= cnt;i++){
            if(prime[i] == 2) t = n/3;
            else t = n/2;
            while(t/prime[i]){
                ans *= prime[i];
                t /= prime[i];
                ans %= mode;
            }//cout << ans%mode<<endl;;
        }
        cout << ans%mode<<endl;;
    }

    return 0;
}

最小公倍数:

// lcm(2^7*3,2^3*3^3,3^5*5^2)=2^7*3^3*5^2;
// 质数的最大次数乘积