求助
  • 板块学术版
  • 楼主一SakuRa
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/8/13 13:02
  • 上次更新2023/11/4 10:49:14
查看原帖
求助
419519
一SakuRa楼主2021/8/13 13:02

求助大佬们

一个问题:

求一个能被1-n内所有数整除的数

1<=n<=10000

我的代码:

#include<bits/stdc++.h>
using namespace std;
const int MOD=10e8+7;
int n;
int prime[10001]={},f[10011]={},all,ans=1;
bool isprime[10001]={};
inline int sieve(int x){
	int cnt=0;
	for(int i=2;i<=n;++i){
		if(!f[i])
			prime[++cnt]=f[i]=i;
		for(int j=1;j<=cnt;++j){
			int temp=i*prime[j];
			if(temp>x)
				break;
			f[temp]=prime[j];
			if(f[i]==prime[j])
				break;
		}
	}
	return cnt;
}
int main(){
	cin>>n;
	all=sieve(n);
	if(n==1||n==2){
		cout<<n;
	}
	else if(n==3){
		cout<<6;
	}
	else{
		for(int i=2;i<=n;i++){
			if(ans%i==0)
				continue;
			if(__gcd(i,ans)!=1)
				ans=(ans%MOD*f[i]%MOD)%MOD;
			else
				ans=(ans%MOD*i%MOD)%MOD;
		}
	}
	cout<<ans%MOD<<endl;
	return 0;
}
2021/8/13 13:02
加载中...