比赛 2026.5.30 评测结果 AATTTTTTWW
题目名称 数列求和 最终得分 20
用户昵称 VTXE 运行时间 31.827 s
代码语言 C++ 内存使用 3.50 MiB
提交时间 2026-05-30 11:13:01
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long

ll n,a,k,mod;
ll ans;

ll mpow(ll aa,ll bb){
	ll res=1;
	while (bb){
		if (bb&1) res=res*aa%mod;
		aa=aa*aa%mod;
		bb>>=1;
	}
	return res;
}

void solve1(){
	for (int i=1;i<=n;i++){
		ans+=mpow(i,k)*mpow(a,i)%mod;
		ans%=mod;
	}
	cout<<ans<<'\n';
}

void dfs(ll l,ll r){
	if (r-l>=5e5){
		ll mid=(l+r)/2;
		dfs(l,mid);
		dfs(mid+1,r);
	}else{
		ll res=0;
		for (int i=0;i<=r-l;i++){
			res+=mpow(a,i);
			res%=mod;
		}
		ans+=mpow(a,l)*res%mod;
		ans%=mod;
	}
}

void solve2(){
	dfs(1,n);
	cout<<ans<<'\n';
}

void solve3(){
	solve1();
}

int main(){
	freopen("oeis.in","r",stdin);
	freopen("oeis.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n>>a>>k>>mod;
	if (n<=1000000){
		solve1();
	}else if (k==0){
		solve2();
	}else if (a==1){
		solve3();
	}else if (k<=100){
		solve1();
	}
	return 0;
}