【题解】LibreOJ10202樱花 线性筛

题目链接
在这里插入图片描述


一番玄学打表后,发现对于 p r i m e i , p r i m e i n , x = p r i m e i , a n s = a n s ( j = 1 log x n n / x j 2 + 1 ) ∀prime_i,prime_i\le n,令x=prime_i,ans=ans*(\sum_{j=1}^{⌊\log_xn⌋}n/x^j*2+1)
表示证明不来,反正对了。

#include<cstdio>
typedef long long ll;
const int mod=1e9+7;
const int N=1e6+10;
ll prime[N/10],p;
bool iscomp[N];
void primetable()
{
	for(ll i=2;i<N;i++)
	{
		if(!iscomp[i])prime[p++]=i;
		for(int j=0;j<p&&i*prime[j]<N;j++)
		{
			iscomp[i*prime[j]]=1;
			if(i%prime[j]==0)break;
		}
	}
}
int main()
{
	primetable();ll n,ans=1;
	scanf("%lld",&n);
	for(ll i=0;i<p&&prime[i]<=n;i++)
	{
		ll x=prime[i],cnt=0;
		while(x<=n)cnt+=n/x,x*=prime[i];
		ans=1ll*ans*(cnt*2+1)%mod;
	}
    printf("%lld\n",ans);
    return 0;
}

总结

这叫打表找规律吗

猜你喜欢

转载自blog.csdn.net/qq_41958841/article/details/82795813