P4626 一道水题 II
求最小公倍数
register 很快,bitset很慢
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int const mod=100000007;
int const N=1e8+7;
int n,cnt,z;
int p[N];
bool v[N];
//bitset<N>v;
ll ans;
int ksm(int a,int b){
int res=1;
while(b){
if(b&1) res*=a;
b >>= 1;
a*=a;
}
return res;
}
int main(){
//cin >> n;
scanf("%ld",&n);
ans=1;
for(register int i=2;i<=n;++i){
if(v[i]==0){
//v[i]=1;
p[++cnt]=i;
z=log(n)/log(i);
ans*=ksm(i,z);
if(ans>mod) ans-=ans/mod*mod;
}
for(register int j=1;j<=cnt&&i*p[j]<=n;++j){
v[ i*p[j] ]=1;
if(i%p[j]==0) break;
}
}
//cout << ans;
printf("%ld",ans);
return 0;
}
