快速幂模+佩尔方程

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
const int Mod=8191;
struct Matrax {
int m[3][3];
};
Matrax a,per; void slove(int d,int &x1,int &y1){
y1=1;
while(true){
x1=(int)sqrt(1.0*d*y1*y1+1);
if(x1*x1-d*y1*y1==1)
break;
y1++;
}
} Matrax multi(Matrax a,Matrax b){
Matrax c;
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
c.m[i][j]=0;
for(int k=0;k<2;k++)
c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%Mod;
}
}
return c;
} Matrax Power(int k){
Matrax ans=per,p=a;
while(k){
if(k&1){
ans=multi(ans,p);
}
k>>=1;
p=multi(p,p);
}
return ans;
} int main(){
int n,k,x1,y1,xt,yt,xn,yn;
while(scanf("%d%d",&n,&k)!=EOF){
int sq=(int)sqrt(n*1.0);
if(sq*sq==n){
printf("No answers can meet such conditions\n");
continue;
}
slove(n,x1,y1);
per.m[0][0]=per.m[1][1]=1;
per.m[0][1]=per.m[1][0]=0;
a.m[0][0]=x1; a.m[0][1]=n*y1;
a.m[1][0]=y1; a.m[1][1]=x1;
Matrax ans=Power(k-1);
int ansx=0;
ansx=(ans.m[0][0]*x1+ans.m[0][1]*y1)%Mod;
printf("%d\n",ansx);
}
return 0;
}

  

最新文章

  1. 基于stm32f4的ucGUI通过外部flash存储汉字库显示任意英文字符和汉字组合(控件可用)
  2. Android—9.png的制作和去除黑线
  3. UvaOJ10369 - Arctic Network
  4. 设置php下载文件的超时时间
  5. 页面静态化1 --- 概念(Apache内置压力测试工具使用方法)
  6. 【转】Problems with HTTPS, HttpWebRequest, and iOS?
  7. jsp基础知识(基本的语法及原理)
  8. Java实现多线程邮件发送
  9. java语言写文件内容
  10. Spring(3.2.3) - Beans(8): 基于 Annotation 的配置
  11. 使用Navicat for Oracle 出现的错误
  12. 160G 视频教程(Java+Android+项目视频)免费下载
  13. 用php+ajax新建流程(请假、进货、出货等)
  14. 找不到包含 OwinStartupAttribute 的程序集。 - 找不到包含 Startup 或 [AssemblyName].Startup 类的程序集。
  15. Jquery Ajax type的4种类型
  16. Lucene 学习资料
  17. logstash的output配置中指定elasticsearch的template
  18. python3+Robot Framework+PyCharm第一个WEB UI自动化用例
  19. gitbook 入门教程之发布电子书
  20. php 两次encodeURI,解决浏览器跳转请求页乱码报错找不到页面的bug

热门文章

  1. AdaBoostClassifier实战
  2. EOJ 2822 内存显示
  3. Hadoop MapReduce编程 API入门系列之二次排序(十六)
  4. .net几种文件下载的方法
  5. 第十课: - 读取/写入Excel/Json格式数据
  6. 配置postgreSQL允许外部连接
  7. spring的四种数据源配置
  8. 脚本_部署LNMP平台
  9. 这里介绍两种将矩阵写入TXT文件的方法。
  10. 【转】【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)