Description

令 $(1+\sqrt 2)^n=e(n)+\sqrt 2\cdot f(n)$ ,其中 $e(n),f(n)$ 都是整数,显然有 $(1-\sqrt 2)^n=e(n)-\sqrt 2\cdot f(n)$。令 $g(n)$ 表示 $f(1),f(2),\cdots ,f(n)$ 的最小公倍数,给定两个正整数 $n$ 和 $p$ ,其中 $p$ 是质数,并且保证 $f(1),f(2),\cdots ,f(n)$ 在模 $p$ 意义下均不为 $0$,请计算 $\sum _{i=1}^{n}i\cdot g(i)$ 模 $p$ 的值。

Input

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

Output

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

在开始推导前先观察两个式子:

$$gcd(fib(a),fib(b))=fib(gcd(a,b))$$

$$gcd(x^a-1,x^b-1)=x^{gcd(a,b)}-1$$

形如 $f(n)=a\cdot f(n-1)+b\cdot f(n-2)$ 的式子具有性质 $gcd(f(x),f(y))=f(gcd(x,y))$ 。

而题目中的式子等价于: $f(0)=0,f(1)=1,f(n)=2f(n-1)+f(n-2)$,同样满足这个性质。

(以下集合 $T$ 均满足 $T\neq \varnothing $)

再由式子:$$lcm(S)=\prod_{T\subset S}gcd(T)^{(-1)^{|T|+1}}$$

可以得到:$$g(n)=\prod _{T\subset 2^{[n]}}f(gcd_{i\in T}(i))^{(-1)^{|T|+1}}$$

构造出 $h$ 满足 $f(n)=\prod _{d|n}h(d)$

得到式子:$$\begin{align*} g(n)&=\prod _{T\subset 2^{[n]}}\left ( \prod _{d|gcd_{i\in T}(i)}h(d) \right )^{(-1)^{|T|+1}}\\ &=\prod _{d=1}^{n}h(d)^{\sum _{T\subset 2^{~[\lfloor \frac{n}{d}\rfloor ]~}}(-1)^{|T|+1}} \end{align*}$$

又由二项式定理可证:$$\sum _{T\subset 2^{[\lfloor \frac{n}{d}\rfloor ]}}(-1)^{|T|+1}=-\sum _{i=1}^{\frac{n}{d}}(-1)^i\binom{\frac{n}{d}}{i}=1$$

所以 $g(n)=\prod _{d=1}^{n}h(d)$

问题解决,时间复杂度 $O(nlogn)$。

 #include<cstdio>
#include<algorithm>
#include<cstring>
#define LL long long
using namespace std;
const int N=1e6+;
int T,n,mod,inv,sum,ans,f[N],h[N];
int read()
{
int x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int power(int a,int b)
{
int ans=;
while(b)
{
if(b&)ans=1ll*ans*a%mod;
a=1ll*a*a%mod;b>>=;
}
return ans;
}
int main()
{
T=read();
while(T--)
{
n=read();mod=read();
f[]=;h[]=f[]=;
for(int i=;i<=n;i++)
h[i]=f[i]=(1ll*f[i-]*+f[i-])%mod;
for(int i=;i<=n;i++)
{
inv=power(h[i],mod-);
for(int j=i+i;j<=n;j+=i)h[j]=1ll*h[j]*inv%mod;
}
sum=;ans=;
for(int i=;i<=n;i++)
sum=1ll*sum*h[i]%mod,ans=(ans+1ll*sum*i)%mod;
printf("%d\n",ans);
}
return ;
}

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

  1. 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 ...

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

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

  3. [Lydsy1704月赛] 最小公倍佩尔数

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

  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 4831 [Lydsy1704月赛]序列操作 dp

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

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

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

  9. BZOJ.4832.[Lydsy1704月赛]抵制克苏恩(期望DP)

    题目链接 \(f[s][i][j][k]\)表示还剩\(s\)次攻击,分别有\(i,j,k\)个血量为\(1,2,3\)的奴隶主时,期望受到伤害. 因为期望是倒推,所以这么表示从后往前求,注意\(a, ...

随机推荐

  1. 海思uboot启动流程详细分析(二)

    1. 第二个start.S 从start_armboot开始,在startup.c中有包含#include <config.h> 在config.h中: /* Automatically ...

  2. input type类型和input表单属性

    一.input type类型 1.Input 类型 - email 在提交表单时,会自动验证 email 域的值. E-mail: <input type="email" n ...

  3. Centos7修改yum源

    1. 备份本地yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak 2.获取阿里yum源配置文 ...

  4. (light oj 1306) Solutions to an Equation 扩展欧几里得算法

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1306 You have to find the number of solutions ...

  5. Unity编辑器扩展

    在开发中有可能需要自己开发编辑器工具,在Unity中界面扩展常见两种情况,拿某插件为例: 1,自建窗口扩展 2,脚本Inspector显示扩展 不管使用那种样式,都需要经常用到两个类EditorGUI ...

  6. Docker 核心技术之Docker Compose

    Docker Compose 简介 Docker Compose是什么? Docker Compose是一个能一次性定义和管理多个Docker容器的工具. 详细地说: Compose中定义和启动的每一 ...

  7. .netcore2.0发送邮件

    SmtpClient smtpClient = new SmtpClient(); smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指 ...

  8. [转帖]EXPDP dumpfile和parallel的关系

    http://blog.itpub.net/28602568/viewspace-2133375/ 转帖 EXPDP 里面 parallel 与 dumpfile 里面的文件数的关系. 但是我这里有一 ...

  9. 初始ajax技术

    一.AJAX是啥? 1.页面无需刷新,异步请求. 2.为什么使用ajax? 原因: 1传统模式  需要将请求发送到服务器,服务器经过业务处理,返回一个页面给客户端.这样做,会很浪费资源. 2.ajax ...

  10. ubuntu16.04 caffe 安装

    所需环境 opencv3.x + cuda9.0 安装 caffe首先在你要安装的路径下 clone : git clone https://github.com/BVLC/caffe.git 进入 ...