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;
}


全部评论

相关推荐

牛客36400893...:我不是这个专业的,但是简历确实没有吸引我的亮点,而且废话太多没耐心看
0offer是寒冬太冷还...
点赞 评论 收藏
分享
12-03 03:32
安徽大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务