做法求调,只能过带有任意特殊性质的点
查看原帖
做法求调,只能过带有任意特殊性质的点
659460
SunsetVoice楼主2024/8/17 19:48
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int mod = 1000000007;
int n,a,b,c,g;
int cnt,p[20000001] = {0},tu[20000001] = {0},s0[20000001] = {0};
bitset<20000001>pr;
void init(){
	s0[1] = 1;
	for(int i = 2;i<=n;i++){
		if(!pr[i]) {
			p[++cnt] = i;
			tu[i] = 1;
			s0[i] = 2;
		}
		for(int j = 1;j<=cnt&&p[j]<=n/i;j++){
			const int nx = i*p[j];
			pr[nx] = 1;
			if(i%p[j]==0){
				tu[nx] = tu[i]+1;
				tu[nx]%=mod;
				s0[nx] = s0[i]/(tu[i]+1)*(tu[nx]+1);
				s0[nx]%=mod;
				break;
			}
			tu[nx] = 1;
			s0[nx] = s0[i]<<1%mod;
		}
	}
	for(int i = 2;i<=n;i++){
		s0[i]+=s0[i-1];
		s0[i]%=mod;
	}
	return;
}
signed main() {
	cin>>n>>a>>b>>c>>g;
	init();
	int ans = 0;
	for(int i = n-1;i>=0;i--){
		ans+=(n%mod*(n-i)%mod+s0[i]%mod*(n-i)%mod)*g%mod;
		g = g*a%mod*a%mod+g*b%mod+c;
		g%=mod;
		ans%=mod;
	}
	cout<<ans<<endl;
	return 0;
}
2024/8/17 19:48
加载中...