博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[bzoj 4833]最小公倍佩尔数
阅读量:6648 次
发布时间:2019-06-25

本文共 1970 字,大约阅读时间需要 6 分钟。

Description 

 Let \((1+\sqrt2)^n=e(n)+f(n)\cdot\sqrt2\) , both \(e(n)\) and \(f(n)\) are integers

 Let \(g(n)\) be the gcd of \(f(1),f(2),...,f(n)\)

 given \(n\)\(p\), where \(p\) is a prime number

 Calculate the value of 

\[  \sum_{i=1}^{n}i\cdot g(i) \ \ \ \ mod \ p \]
 \(T\leq 210 ,\sum n\leq 3×10^6\)

Solution 

\[ f(n)=2f(n-1)+f(n-2),f(0)=1,f(1)=1 \]

 Similar to the \(Fibonacci\) sequence, we have

\[  gcd(f(a),f(b))=f(gcd(a,b)) \]
 It's hard to evaluate LCM directly,but we can get it by maximum inversion
\[  lcm(S)=\prod_{T⊆S,T≠∅}gcd(T)^{(−1)^{|T|−1}} \]
 so we can find that
\[  g(n)=\prod_{T⊆S,T≠∅}f(gcd(T))^{(−1)^{|T|−1}} \]
 The next step is the most important.

 construct a function \(h\) ,which satisfies

\[  f(n)=\prod_{d|n}h(d) \]
 we can calculate \(h(1...n)\) easily by \(O(n\log n)\)

 and 

\[  \begin{equation}  \begin{split}  g(n)&=\prod_{d=1}^n h(d)^{∑_{T⊆S,T≠∅,d|gcd(T)}(−1)^{|T|+1}}\\  &=\prod_{d=1}^nh(d)  \end{split}  \end{equation} \]

 

Code 

#include
#define ll long long#define reg register#define db doubleusing namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();} return x*f;}const int MN=1e6+5;int f[MN],h[MN],n,P,ans;int Mul(int x,int y){return 1ll*x*y%P;}int Add(int x,int y){return (x+y)%P;}int fpow(int x){int r=1,m=P-2;for(;m;m>>=1,x=Mul(x,x))if(m&1)r=Mul(r,x);return r;} int main(){ int T=read(); while(T--) { n=read(),P=read(); reg int i; f[0]=0;h[0]=h[1]=f[1]=1; for(i=2;i<=n;++i) h[i]=1,f[i]=Add(Mul(f[i-1],2),f[i-2]); for(i=2;i<=n;++i) { h[i]=Mul(f[i],fpow(h[i])); for(int j=i<<1;j<=n;j+=i) h[j]=Mul(h[j],h[i]); } for(ans=0,i=1;i<=n;++i) h[i]=Mul(h[i],h[i-1]),ans=Add(ans,Mul(h[i],i)); printf("%d\n",ans); } return 0;}


Blog来自PaperCloud,未经允许,请勿转载,TKS!

转载于:https://www.cnblogs.com/PaperCloud/p/10955865.html

你可能感兴趣的文章
树莓派蓝牙连接
查看>>
设计师的视觉设计五项修炼
查看>>
php的错误级别
查看>>
eclipse修改android项目的apk包名类名
查看>>
斐讯路扫地机器人怎么关机_扫地机器人使用方法,使用教程
查看>>
java 二元一次方程式_JAVA求解一元一次二次方程
查看>>
上车是什么意思_“上车饺子下车面”,是什么意思?看完心里暖暖的
查看>>
anaconda安装python3消失_Python学习第47课-安装Python以及anaconda介绍
查看>>
centos7中编译安装nodejs_Docker(一)CentOS7中安装Docker视频教程
查看>>
ug装配绕轴旋转_UG模具设计培训就到新科教育
查看>>
Unix整理笔记-超级无敌常用命令杂谈1-里程碑M6
查看>>
CloudStack4.1.1升级CloudPlatForm4.2.0实践手册
查看>>
Centos安装各种数据分析库,numpy,pandas,matplotlib,seaborn,scipy
查看>>
C#基础知识整理:C#类和结构(3)
查看>>
SharePoint Server 2010 初始化
查看>>
【我眼中的戴尔转型】(四)惠普之道,月亮的脸悄悄地在改变
查看>>
***S 2012 聚合函数 -- 指定分页示例
查看>>
直播疑难杂症排查(3)— 首开慢
查看>>
某公司机房成功搭建openssh server跳板服务器
查看>>
ADT在線互動教學
查看>>