/*
HDU4565 So Easy!
http://acm.hdu.edu.cn/showproblem.php?pid=4565
数论 快速幂 矩阵快速幂
题意:求[(a+sqrt(b))^n ]%m [ ]代表向上取证
联想到斐波那契数列,所以第一感觉是矩阵快速幂
后来发现根本不用这么麻烦,我们认为a+b*sqrt(c)中的a为实部
b为虚部,就能直接用二元乘法模拟矩阵快速幂了,因此这两种方法
是等价的。于是乎,我们就解决了精度问题。
然而即使我们得出了结果中的a+b*sqrt(c)也不能这么算
因为[b*sqrt(c)]%m不和[b%m*sqrt(c)]%m同余,因此只能另辟蹊径。
注意到题目中的(a-1)^2< b < a^2 <=> 0<a-sqrt(b)<1
所以 0<(a+sqrt(b))^n<1 而 (a+sqrt(b))^n与(a-sqrt(b))^n是公轭的
所以其和只剩下了实部的二倍。因此只需求出实部,将其乘以2就是答案。
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <iostream>
#include <map>
#include <set>
#define test
using namespace std;
const int Nmax=;
//const long long mod=2147483647LL;
//double eps=1e-8;
long long a,b,n,m;
struct Num
{
long long a;
long long b;
long long c;
Num(long long _a,long long _b,long long _c)
{
a=_a;
b=_b;
c=_c;
}
friend Num operator * (Num x,Num y)
{
long long a1=x.a%m,b1=x.b%m,a2=y.a%m,b2=y.b%m,c=x.c;
long long a=(a1*a2%m+((c*b1*b2)%m))%m;
long long b=((a1*b2)%m+((b1*a2)%m))%m;
return Num(a,b,c);
}
friend Num qpow(Num base,long long n)
{
Num ans(1LL,0LL,base.c);
//ans.print();
while(n>0LL)
{
if(n&1LL)
ans=ans*base;
base=base*base;
n>>=;
//ans.print();
}
//printf("%lld %lld %lld\n",ans.a,ans.b,ans.c);
return ans;
}
void print()
{
printf("a:%lld b:%lld c:%lld\n",a,b,c);
}
}; void work()
{
Num base(a,1LL,b);
Num ans=qpow(base,n);
//ans.print();
long long a=ans.a,b=ans.b,c=ans.c;
//long long res=(long long)ceil(a+b*sqrt(c));//不能这么写,因为整数和小数直接不能模
//while(a<=0)
//a+=m;
//while(b<=0)
//b+=m;
//ans.print();
//long long res=(long long)ceil(a+b*sqrt(c));
//printf("res:%lld\n",res);
//res=res%m;
//printf("%lld %lld %ll\n",a,b);
//ans.print();
//if(2LL*a!=ceil(a+b*sqrt(c)))
//printf("NO\n");
//res=(2LL*a)%m;
//printf("ans:%lld myans:%lld\n",(2LL*a)%m,(long long)ceil(a+b*sqrt(c))%m);
long long res=2LL*a%m;
printf("%lld\n",res); }
int main()
{
#ifdef test
//freopen("hdu4565.in","r",stdin);
#endif
while(scanf("%lld%lld%lld%lld",&a,&b,&n,&m)==)
work();
return ;
}

HDU4565 So Easy!的更多相关文章

  1. HDU4565 So Easy! —— 共轭构造、二阶递推数列、矩阵快速幂

    题目链接:https://vjudge.net/problem/HDU-4565 So Easy! Time Limit: 2000/1000 MS (Java/Others)    Memory L ...

  2. hdu4565 So Easy! 矩阵快速幂

    A sequence Sn is defined as: Where a, b, n, m are positive integers.┌x┐is the ceil of x. For example ...

  3. HDU4565 So Easy! 矩阵高速幂外加数学

    easy 个屁啊,一点都不easy,题目就是要求公式的值,但是要求公式在最后的取模前的值向上取整.再取模,无脑的先试了高速幂 double  fmod来做,结果发现是有问题的.这题要做肯定得凑整数,凑 ...

  4. hdu4565 So Easy!(矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4565 题解:(a+√b)^n=xn+yn*√b,(a-√b)^n=xn-yn*√b, (a+√b)^n ...

  5. 【HDU4565】So Easy!

    [HDU4565]So Easy! 题面 要你求 \[ \lceil (a+\sqrt b)^n \rceil \% m \] 其中\(0<a,m<2^{15},(a-1)^2<b& ...

  6. HDU 4565 So Easy!(公式化简+矩阵)

    转载:http://www.klogk.com/posts/hdu4565/ 这里写的非常好,看看就知道了啊. 题意很easy.a,b,n都是正整数.求 Sn=⌈(a+b√)n⌉%m,(a−1)2&l ...

  7. HDU 4565 So Easy!(数学+矩阵快速幂)(2013 ACM-ICPC长沙赛区全国邀请赛)

    Problem Description A sequence Sn is defined as:Where a, b, n, m are positive integers.┌x┐is the cei ...

  8. hdu4565---So Easy!(矩阵)

    Problem Description A sequence Sn is defined as: Where a, b, n, m are positive integers.┌x┐is the ce ...

  9. 【转】Windows下使用libsvm中的grid.py和easy.py进行参数调优

    libsvm中有进行参数调优的工具grid.py和easy.py可以使用,这些工具可以帮助我们选择更好的参数,减少自己参数选优带来的烦扰. 所需工具:libsvm.gnuplot 本机环境:Windo ...

随机推荐

  1. MTK camera 闪光灯Flashlight驱动调试流程

    MTK camera 闪光灯Flashlight驱动调试流程 分类: MtkDev  |  作者: topicdev 相关  |  发布日期 : 2014-09-26  |  热度 : 153°   ...

  2. Android内存解析(一)—从Linux系统内存逐步认识Android应用内存

    总述 Android应用程序被限制了内存使用上限,一般为16M或24M(具体看系统设置),当应用的使用内存超过这个上限时,就会被系统认为内存泄漏,被kill掉.所以在android开发时,管理好内存的 ...

  3. 循环遍历Java字符串字符的规范方法——类似python for ch in string

    比如我将string作为CNN 文本处理输入: float [] input = new float[maxLength]; // 1 sentence by maxLenWords // int[] ...

  4. Java 接口(interface)的三种类型

    放入接口中的任何域(成员变量)都自动是 static 和 final 的: 1. 包含抽象方法的常规接口 2. 全部是常量的 接口类中的方法和属性不要添加任何修饰符号(public 也不需要). 因为 ...

  5. codeforces 931E Logical Expression dp

    time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standa ...

  6. selenium3 + python - js处理readonly属性

    前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性的问题. 基本思路:先用j ...

  7. Django day06 模版层(一) 变量和深度查询

    一.模版语法之变量:  1  - {{ 变量 }} ******重要*******{#这个相当于print了该变量#} def index(request): name = 'prince' #字符串 ...

  8. Spring Data 自动生成

    之前一直用的mybatis逆向自动生成,由于最近学习springdata,所以看了一下springdata的自动生成,基本与mybatis一致,不同的也许就是逆向生成代码(实体类,mapper等)和正 ...

  9. bitmap实现背景透明

    近日在项目中,一直被一个问题搞得头大的很,美工要把按钮图片弄成不规则的,但是在winform里实现又不仅仅是使用简单的png图片而已.在网上找到一些方法,稍微改了一点加工成项目所需. 贴出解决方案,以 ...

  10. 深入浅出java多态

    所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个 ...