求助大佬
查看原帖
求助大佬
648660
Name1楼主2022/8/4 12:38

为什么莫名其妙的RE了

#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
const int MOD=100000007;
int n,ans=1;
int t,is_prime[5761456],prime[5761456];
inline void xxs(int n)
{
	is_prime[1]=1;
	for(int i=2;i<=n;i++)
	{
		if(!is_prime[i]) prime[++t]=i;
		for(int j=1;j<=t&&i*prime[j]<=n;j++)
		{
			is_prime[i*prime[j]]=1;
			if(!(i%prime[j])) break;
		}
	}
}
inline int mul(int a,int b,int MOD)
{
	int res=0;
	while(b)
	{
		if(b&1) res=(res+a)%MOD;
		a=2*a%MOD;
		b>>=1;
	}
	return res;
}
inline int check(int x)
{
	int res=1;
	while(res<=n) res*=x;
	res=res>n?res/x:res;
	return res;
}
signed main()
{
	scanf("%lld",&n);
	xxs(n);
	for(int i=1;i<=t;i++)
	{
		int res=check(prime[i]);
		ans=mul(ans,res,MOD);
	}
	printf("%lld",ans);
	return 0;
}
2022/8/4 12:38
加载中...