itz_HanQAQ @ 2024-11-10 09:21:24
题目 题目描述
小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣。于是他决定做实验并 观察细胞分裂的规律。
他选取了一种特别的细胞,每天每个该细胞可以分裂出 x − 1 个新的细胞。
小 X 决定第 i 天向培养皿中加入 i 个细胞(在实验开始前培养皿中无细胞)。
现在他想知道第 n 天培养皿中总共会有多少个细胞。
由于细胞总数可能很多,你只要告诉他总数对 w 取模的值即可。
输入格式
第一行三个正整数 n, x, w。
输出格式
一行一个数表示第 n 天的细胞总数对 w 取模的值。
样例输入
2 2 47
样例输出
4
数据范围
对于 100% 的数据,n ≤ 107,1 ≤ x, w ≤ 231 − 1。
对于其中 30% 的数据,x = 1。
#include<bits/stdc++.h>
using namespace std;
long long ans[10000005];
int main(){
int n,x,w;
cin>>n>>x>>w;
ans[1]=1;
for(int i=2;i<=n;i++){
ans[i]=(i+ans[i-1]*x)%w;
}
cout<<ans[n];
return 0;
}
by itz_HanQAQ @ 2024-11-10 09:25:04
补充
漏了一个x--
by Ruan_ji @ 2024-11-10 09:25:56
@itz_HanQAQ 你写的不是对的吗?
by itz_HanQAQ @ 2024-11-10 09:30:42
@Ruan_ji 抱歉 放了分裂x-1个就是1个变成x个
by _lfggy__liangfeng__ @ 2024-11-10 09:36:09
@itz_HanQAQ
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll n,x,w;
ll quickpow(ll a,ll b)
{
ll t=1;
while(b)
{
if(b&1) t=t*a%w;
a=a*a%w;
b>>=1;
}
return t%w;
}
int main()
{
scanf("%lld%lld%lld",&n,&x,&w);
printf("%lld\n",quickpow(n,x));
return 0;
}
你提交看看?
by itz_HanQAQ @ 2024-11-10 09:50:21
@-lfggyliangfeng 过不了