F题,可以帮我看看吗?一直150分,还有段错误,但是不知道在哪里呀
#include<bits/stdc++.h>
using namespace std;
#define inf 1e18
#define endl '\n'
#define int long long
typedef long long ll;
typedef pair<int,int> pii;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
int ksm(int base,int p,int mod){
int res=1;
while(p){
if(p&1) res=res*base%mod;
base=base*base%mod;
p>>=1;
}
return res;
}
void solve(){
int base,c0,mod;
cin >> base >> c0 >> mod;
if(mod==1){
int q;cin >> q;
while(q--){
cout << 0 << endl;
}
return;
}
vector<int> vis(mod*2+1,0);
int cs=-1,ce=-1,cur_sum=0,cur_c=c0;
vector<int> sum(1,0);
//首先生成一个c
int cnt=0;
while(1){
cur_c=ksm(base,cur_c,mod);
if(vis[cur_c]){
cs=vis[cur_c];
ce=cnt;
break;
}
cnt++;
cur_sum=(cur_sum+cur_c)%mod;
sum.push_back(cur_sum);
vis[cur_c]=cnt;
}
int pre=sum[cs-1];
int len=ce-cs+1;
int tot=(sum[ce]-sum[cs-1]+mod)%mod;
int q;cin >> q;
while(q--){
int k;cin >> k;
if(k<=ce){
cout << sum[k] << endl;
}else{
int cycle_time=(k-cs+1)/len%mod;
int rem=(k-cs+1)%len;
int ans=((pre+cycle_time*tot%mod)%mod+(sum[cs+rem-1]-pre+mod)%mod)%mod;
cout << ans << endl;
}
}
}
/*
*/
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t=1;
// cin >> t;
while(t--){
solve();
}
return 0;
}
红完了呀F题。
查看22道真题和解析
巨人网络公司福利 91人发布