题意

将\(x_1,x_2,x_3...x_n\)写出来可以发现通项为\(a^{i-1}*x_1+b*\sum\limits_{j=0}^{i-2}a^j=a^{i-1}*x_1+b*\frac{1-a^{i-1}}{1-a}=(x_1-\frac{b}{1-a})a^{i-1}+\frac{b}{1-a}\)

所求变为求一个\(i\)满足:

\(t\equiv (x_1-\frac{b}{1-a})a^{i-1}+\frac{b}{1-a}\pmod{p}\)

\(a^{i-1}\equiv \frac{t-(\frac{b}{1-a})}{x_1-\frac{b}{1-a}}\pmod{p}\)

上BSGS即可,注意特判\(a=0/1\)。

\(a=0\):对于任意\(i,x_i=b\)

\(a=1\):\(x_i=x_1+(i-1)*b\)

解下对应的方程即可。

code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int T;
ll a,b,x1,mod,goal;
inline ll power(ll x,ll k,ll mod)
{
ll res=1;
while(k)
{
if(k&1)res=res*x%mod;
x=x*x%mod;k>>=1;
}
return res;
}
inline ll inv(ll x,ll mod){return power(x,mod-2,mod);}
inline ll BSGS(ll a,ll b,ll mod)
{
if(b==1)return 0;
unordered_map<ll,int>mp;mp.clear();
a%=mod,b%=mod;
ll t=ceil(sqrt(mod));
ll now=1;
for(int i=0;i<=t;i++)mp[b*now%mod]=i,now=now*a%mod;
a=power(a,t,mod);
if(!a)return !b?1:-1;
now=a;
for(int i=1;i<=t;i++)
{
if(mp.count(now))return i*t-mp[now];
now=now*a%mod;
}
return -1;
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld%lld%lld%lld",&mod,&a,&b,&x1,&goal);
if(x1==goal){puts("1");continue;}
if(!a){puts(b==goal?"2":"-1");continue;}
if(a==1)
{
goal=((goal-x1)%mod+mod)%mod;
ll d=__gcd(b,mod);
if(goal%d){puts("-1");continue;}
ll res=(goal*inv(b,mod)+1)%mod;
if(!res)res=mod;
printf("%lld\n",res);
continue;
}
ll res=BSGS(a,((goal-b*inv(1-a,mod)%mod)%mod+mod)%mod*inv(((x1-b*inv(1-a,mod)%mod)%mod+mod)%mod,mod)%mod,mod);
printf("%lld\n",res==-1?res:res+1);
}
return 0;
}

最新文章

  1. 比特币_Bitcoin 简介
  2. ((uchar*)(Img1-&gt;imageData + Img1-&gt;widthStep*pt.y))[pt.x] 的 具体含义
  3. google play下载apk
  4. 【8-23】node.js学习笔记
  5. CF 15/09/23
  6. C#&amp;JQ仿网上商城商品条件筛选功能
  7. UTR#2 T1
  8. HDOJ 1397 Goldbach&#39;s Conjecture(快速筛选素数法)
  9. tab group of firefox
  10. 自己写的select元素可编辑、可筛选JQuery插件 jquery.inputselectbox.js
  11. [笔记]LibSVM源码剖析(java版)
  12. Net core 关于缓存的实现
  13. vue-cli使用vux时报错处理,“You may need an appropriate loader to handle this file type”
  14. AutoCAD开发1---获取块属性
  15. Linux下部署Samba服务环境的操作记录
  16. keepalived概述
  17. 应用SharedPreference保存程序的配置信息
  18. 转载-asp.net id 和name的区别
  19. SpringBoot集成MyBatis的分页插件PageHelper
  20. CentOS 7 隐藏任务栏和顶栏

热门文章

  1. JavaScript中一个对象数组按照另一个数组排序
  2. LG2679 「NOIP2015」子串 线性DP
  3. Salesforce 开发整理(一)测试类最佳实践
  4. IT兄弟连 Java语法教程 流程控制语句 循环结构语句3
  5. 【Linux命令】centos防火墙使用和配置
  6. 09-Django静态文件
  7. asp.net core web api 生成 swagger 文档
  8. python基础(29):网络编程(软件开发架构、网络基础、套接字初使用)
  9. Netty与RPC
  10. 如何在HTML中设置文本的大小写