4833: [Lydsy1704月赛]最小公倍佩尔数

Time Limit: 8 Sec  Memory Limit: 128 MB
Submit: 202  Solved: 99
[Submit][Status][Discuss]

Description

令(1+sqrt(2))^n=e(n)+f(n)*sqrt(2),其中e(n),f(n)都是整数,显然有(1-sqrt(2))^n=e(n)-f(n)*sqrt(2)。令g(

n)表示f(1),f(2)…f(n)的最小公倍数,给定两个正整数n和p,其中p是质数,并且保证f(1),f(2)…f(n)在模p意义
下均不为0,请计算sigma(i*g(i)),1<=i<=n.其在模p的值。
 

Input

第一行包含一个正整数 T ,表示有 T 组数据,满足 T≤210 。接下来是测试数据。每组测试数据只占一行,包含
两个正整数 n 和 p ,满足 1≤n≤10^6,2≤p≤10^9+7 。保证所有测试数据的 n 之和不超过 3×10^6  。
 
 

Output

对于每组测试数据,输出一行一个非负整数,表示这组数据的答案。

 
 

Sample Input

5
1 233
2 233
3 233
4 233
5 233

Sample Output

1
5
35
42
121

HINT

 

Source

 
 
    一眼看去就是一道毒瘤数论题233333
    首先要把 f() 这个数列搞出来,把f(n)的表达式写出来,发现是 ∑ [i%2==1] * C(n,i) * (sqrt(2)^(i-1))。
    (打个表就可以发现 f(n) = 2 * f(n-1) + f(n-2) 了嘛 2333)
 
    显然类菲波那切数列(满足 f(n+m) = f(n+1) * f(m) + f(n) * f(m-1)) 都是满足 gcd(f(x) , f(y)) = f( gcd(x,y) )的啊,之后对指数做min_max容斥,就可以得到一坨子关于子集gcd乘乘除除的玩意,看起来还有点麻烦。。。
    于是可以再设 f(n) = π h(d) * [d|n] ,然后样把所有 f(gcd) 替换成 π h(),化简一下就可以发现 : g(i) = π h(j) * [j<=i] ,于是就可以直接做了QWQ
 
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e6+5; inline int add(int x,int y,const int ha){ x+=y; return x>=ha?x-ha:x;}
inline void ADD(int &x,int y,const int ha){ x+=y; if(x>=ha) x-=ha;}
inline int mul(int x,int y,const int ha){ return x*(ll)y%ha;} inline int ksm(int x,int y,const int ha){
int an=1;
for(;y;y>>=1,x=mul(x,x,ha)) if(y&1) an=mul(an,x,ha);
return an;
} int T,f[maxn],h[maxn],n,ans=0,p,now; inline void solve(){
f[1]=1; for(int i=2;i<=n;i++) f[i]=add(add(f[i-1],f[i-1],p),f[i-2],p); for(int i=1,inv;i<=n;i++){
h[i]=f[i],inv=ksm(h[i],p-2,p); for(int j=i*2;j<=n;j+=i) f[j]=mul(f[j],inv,p); now=mul(now,h[i],p);
ADD(ans,mul(now,i,p),p);
}
} int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&p); ans=0,now=1,solve(); printf("%d\n",ans);
} return 0;
}

  

[Lydsy1704月赛] 最小公倍佩尔数的更多相关文章

  1. BZOJ4833: [Lydsy1704月赛]最小公倍佩尔数(min-max容斥&莫比乌斯反演)(线性多项式多个数求LCM)

    4833: [Lydsy1704月赛]最小公倍佩尔数 Time Limit: 8 Sec  Memory Limit: 128 MBSubmit: 240  Solved: 118[Submit][S ...

  2. BZOJ 4833: [Lydsy1704月赛]最小公倍佩尔数(数论 + 最值反演)

    题面 令 \({(1+\sqrt 2)}^n=e(n)+f(n)*\sqrt2\) ,其中 \(e(n),f(n)\) 都是整数,显然有 \({(1-\sqrt 2)}^n=e(n)-f(n)*\sq ...

  3. 【bzoj 4833】[Lydsy1704月赛]最小公倍佩尔数

    Description 令 $(1+\sqrt 2)^n=e(n)+\sqrt 2\cdot f(n)$ ,其中 $e(n),f(n)$ 都是整数,显然有 $(1-\sqrt 2)^n=e(n)-\s ...

  4. BZOJ4833: [Lydsy1704月赛]最小公倍佩尔数

    Problem 传送门 Sol 容易得到 \[f_n=e_{n-1}+f_{n-1},e_{n-1}=f_{n-1}+e_{n-1},f_1=e_1=1\] 那么 \[f_n=2\times \sum ...

  5. 【BZOJ4833】最小公倍佩尔数(min-max容斥)

    [BZOJ4833]最小公倍佩尔数(min-max容斥) 题面 BZOJ 题解 首先考虑怎么求\(f(n)\),考虑递推这个东西 \((1+\sqrt 2)(e(n-1)+f(n-1)\sqrt 2) ...

  6. [bzoj 4833]最小公倍佩尔数

    传送门 Description   Let \((1+\sqrt2)^n=e(n)+f(n)\cdot\sqrt2\) , both \(e(n)\) and \(f(n)\) are integer ...

  7. bzoj 4836 [Lydsy1704月赛]二元运算 分治FFT+生成函数

    [Lydsy1704月赛]二元运算 Time Limit: 8 Sec  Memory Limit: 128 MBSubmit: 577  Solved: 201[Submit][Status][Di ...

  8. BZOJ4831: [Lydsy1704月赛]序列操作(非常nice的DP& 贪心)

    4831: [Lydsy1704月赛]序列操作 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 250  Solved: 93[Submit][Statu ...

  9. bzoj 4831 [Lydsy1704月赛]序列操作 dp

    [Lydsy1704月赛]序列操作 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 203  Solved: 69[Submit][Status][Dis ...

随机推荐

  1. BTA 常问的 Java基础40道常见面试题及详细答案(山东数漫江湖))

    八种基本数据类型的大小,以及他们的封装类 引用数据类型 Switch能否用string做参数 equals与==的区别 自动装箱,常量池 Object有哪些公用方法 Java的四种引用,强弱软虚,用到 ...

  2. idea ssm框架搭建

    1.分享一篇完整的ssm框架搭建连接 大牛博客:https://www.cnblogs.com/toutou/p/ssm_spring.html#_nav_0 2.我的搭建的完整项目连接,可以进入我的 ...

  3. 微软Azure DevOps 使用docker 持续集成 dotnet

    azure 环境设置 登录azure 地址 https://dev.azure.com/ 使用微软账号就可以进行登录. 点击右上角新建项目 项目信息,尽量用小写 创建项目 修改默认的dockerfil ...

  4. 【HNOI】 lct tree-dp

    [题目描述]给定2-3颗树,每个边的边权为1,解决以下独立的问题. 现在通过连接若干遍使得图为连通图,并且Σdis(x,y)最大,x,y只算一次. 每个点为黑点或者白点,现在需要删除一些边,使得图中的 ...

  5. Java中基于HotSpot虚拟机的垃圾收集器

    名称 过程 优缺点 Serial 进行垃圾收集时,必须暂停其他所有的工作进程,直到它收集结束.是一个单线程收集器. Stop the world. 新生代收集器. 手工设置新生代的大小:-Xmn Ed ...

  6. esp8266 IOT Demo 固件刷写记录

    将编译好的固件按照下面地址刷写到esp8266 出现下面错误是因为刷写的设置不对,按照图上设置: load 0x40100000, len 26828, room 16 tail 12chksum 0 ...

  7. C#数据没初始化,使用会报错,可以初始化null

    protected void Page_Load(object sender, EventArgs e) { string[] A; if (B== 0) { A = new string[] {1, ...

  8. Swift 特殊关键字 与符号

    #available() 函数来检查API函数的可用性 // 判断当前版本是否 iOS8.0+,OSX10.10+以及以其他平台 if #available(iOS 8.0, OSX 10.10, * ...

  9. log4j日志相对路径,Tomcat(第三方和Springboot内置)参数catalina.home和catalina.base的设置

    关于Log4j日志相对路径的配置请看:log4j 产生的日志位置设置 和 catalina.home.catalina.base . 由于我们在Log4j的配置中引入了系统属性${catalina.b ...

  10. (转载)IntelliJ IDEA 自动导入包 快捷方式

    原文地址:IntelliJ IDEA 自动导入包 快捷方式 idea可以自动优化导入包,但是有多个同名的类调用不同的包,必须自己手动Alt+Enter设置 设置idea导入包 勾选标注 1 选项,In ...