JZOJ4015. 【雅禮聯考DAY01】數列

JZOJ4015. 【雅禮聯考DAY01】數列
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

這裡寫圖片描述
這裡寫圖片描述

題解

題目的意思很明確,
看看資料範圍就覺得有點神奇,
先看前面7個資料,這個就直接模擬就好了。
在看8-14,此時的模數比較小,就知道應該是找迴圈節。
然後就只剩下最後的了,
有個特殊條件,看看怎樣利用,
這裡寫圖片描述

利用一下費馬小定理,就愉快地解決了這題。

code

#include <cstdio>
#include <iostream>
#define ll long long
using namespace std;
ll n,a,b,c,m,x,t;
int p[1000003];
ll ksm(ll x,ll y,ll mo)
{
ll s=1;x=x%mo;
for(;y;y>>=1,x=x*x%mo)
if(y&1)s=s*x%mo;
return s;
}
int main()
{   
scanf("%lld%lld%lld%lld%lld%lld",&x,&a,&b,&c,&n,&m);
x=x%m;
if(4*a*c==b*b-2*b)
{
t=ksm(2,n,m-1)-1;
if(t<0)t m-1;
printf("%lld",(ksm(a,t,m)*ksm(x b/a/2,t 1,m)%m-b/2/a m)%m);
return 0;
}
if(n>m)
{
for(register int i=1;i<=n;i  )
{
x=((a*x%m*x%m b*x%m)%m c)%m;
if(p[x])
{
n=n-p[x];
n=n%(i-p[x]);
break;
}else p[x]=i;
}
}
for(register int i=1;i<=n;i  )
x=((a*x%m*x%m b*x%m)%m c)%m;
printf("%lld",x);
return 0;
}

相關文章

程式語言 最新文章