首页 > 其他分享 >HDU - 4565So Easy!

HDU - 4565So Easy!

时间:2024-01-15 15:59:11浏览次数:21  
标签:HDU 4565So ll typedef sqrt Easy 特征方程 include define

知道这个套路才比较easy

\(a_n=(a+\sqrt{b})^n ,b_n=(a-\sqrt{b})^n\)且\(0<b_n<1\)
令\(c_n=a_n+b_n\),所以
\(c_n=\lceil a_n \rceil\)

联系递推方程
\(F_n=pF_{n-1}+qF_{n-2}\)
\(a+\sqrt{b} ,a-\sqrt{b}\)是特征方程
\(x^2=px+q\)的两个根
算出p,q就可以像斐波那契数列一样用矩阵乘法

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<bitset>
#include<cmath>
#include<set>
#include<unordered_map>
#define fo(i,a,b) for (ll (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (ll (i)=(b);(i)>=(a);(i)--)
#define mk(x,y) make_pair((x),(y))
//#define A puts("Yes")
//#define B puts("No")
using namespace std;
typedef double db;
typedef long long ll;
//typedef __int128 i128;
const int N=1e6+5;
const ll inf = 1ll << 60;
//const ll mo=1e9+7;
ll n,p,q,k,m,a,b;
struct mat{
	ll a[3][3];
	void init() {
		memset(a,0,sizeof(a));
	}
	friend mat operator * (const mat &a,const mat &b) {
		mat c;
		c.init();
		fo(i,1,2) fo(j,1,2) fo(k,1,2) { //
			c.a[i][j]+=a.a[i][k]*b.a[k][j]%m;
			c.a[i][j]%=m;			
		}
		return c;
	}
	void print(){
		fo(i,1,2) {
			fo(j,1,2) printf("%lld ",a[i][j]);
			printf("\n");
		}
	}
}; 

void solve(){
	mat t,y;
	t.init();
	y.init();
	if (n==1) {
		printf("%lld\n",2ll*a%m);
		return;
	}
	
	t.a[1][1]=(2ll*a%m*a%m+2ll*b%m)%m;
	t.a[2][1]=2ll*a%m;
	
	y.a[1][1]=2ll*a%m; y.a[1][2]=((b-a*a%m)%m+m)%m;
	y.a[2][1]=1;
	
	n-=2;
	while (n) {
		if (n&1) t=y*t;
		y=y*y;
		n/=2;
	}
	
	printf("%lld\n",t.a[1][1]);
}
int main()
{
//	freopen("data.in","r",stdin);
	
	while (scanf("%lld %lld %lld %lld",&a,&b,&n,&m)!=EOF) {
		solve();
	}
	
	return 0;
}



UVA 10655 Contemplation! Algebra
给出a+b,ab,n,求\(a^n+b^n\)
一样的套路,将a,b看作是特征方程的根,然后还原方程的系数。

标签:HDU,4565So,ll,typedef,sqrt,Easy,特征方程,include,define
From: https://www.cnblogs.com/ganking/p/17965521

相关文章

  • hdu 4990 Reading comprehension(矩阵乘法)
    Readtheprogrambelowcarefullythenanswerthequestion.pragmacomment(linker,"/STACK:1024000000,1024000000")includeincludeincludeincludeincludeincludeconstintMAX=100000*2;constintINF=1e9;intmain(){intn,m,ans,i;while(sc......
  • HDU 4686 Arc of Dream(构造矩阵)
    设\(t_n=a_n*b_n\)把\(a_n和b_n\)拆出来\(t_n=(a_{n-1}*ax+ay)(b_{n-1}*bx+by)\)\(t_n=ax*bx*t_{n-1}+ax*by*a_{n}+ay*bx*b_{n-1}+ay*by\)那么同时维护\(s_n,t_n,a_n,b_n和常数即可\)#include<cstdio>#include<algorithm>#include<cstring>#include&l......
  • easyexcel 下载
    1,依赖<!--3.1.1及以上可以支持分批下载--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency>2,编码通用步骤:1,构建sheet:设置sheet名称、格式2,构建Exce......
  • 车机必备软件-小白点EasyTouch(类似苹果的悬浮球,返回,清理垃圾,杀进程)
    简介有些小伙伴升级车机后,由于部分软件打开后处于全屏状态无法返回,这里我教大家如何解决。解决办法就是:在车机上安装这款小白点软件,这款软件体积小巧,不占内存,操作也十分方便,它能帮助你快速回到主屏幕和返回上一个界面。界面展示caplay界面普通车机界面软件功能1、主屏......
  • mrctf2020_easyoverflow
    mrctf2020_easyoverflow控制栈上参数程序控制流bamuwe@qianenzhao:~$checksecmrctf2020_easyoverflow[*]'/home/bamuwe/mrctf2020_easyoverflow'Arch:amd64-64-littleRELRO:FullRELROStack:CanaryfoundNX:NXenabled......
  • [oeasy]python0004_游乐场_和python一起玩耍_python解释器_数学运算
    和python玩耍......
  • EasyCVR设备分组中在线/离线数量统计的开发与实现
    今天我们来分享一下EasyCVR设备分组中在线/离线数量统计的开发与实现。1)该功能需要通过前端控制台工具的接口获取分组列表,接口为:labelchannel/infoGo语言接口为:2)查看最终返回的分组数据:这样可以了解到前端获取到的数据为"data"字段的值,所以只需要找到“data”对应的reult如何定义,就......
  • EasyCVR使用RTMP推流但是通道显示不在线的原因排查
    安防视频监控平台EasyCVR采用了开放式的网络结构,支持高清视频的接入和传输、分发,平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,此外,国标GB28181高清可视化视频监控云平台EasyCVR......
  • 安防视频监控平台EasyCVR使用RTMP推流但是通道显示不在线的原因排查
    安防视频监控平台EasyCVR采用了开放式的网络结构,支持高清视频的接入和传输、分发,平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,此外,国标GB28181高清可视化视频监控云平台EasyCVR......
  • 双向广搜-> hdu1195
    问题描述:密码锁有起始和目标两个状态,状态有4个连续数字,数字范围是1~9。其中特殊情况9+1=0,1-1=9。每次操作可以交换相邻的两个锁上的数字,或者将该位上数字±1。求最小操作次数分析:是一道双向广搜的题,但是这个题目的第一个思路就是枚举所有的排列组合状态,然后对每个状......