二次剩余学习小记(+斐波那契通项公式推导)

斐波那契通项公式

来自https://www.zhihu.com/question/25217301/answer/158753864

(F(x)=x+x^2+2x^3+3x^4+4x^5+...=frac{x}{1-x-x^2})

(F(x)=frac{a}{1-cx}+frac{b}{1-dx}),可以列出方程

根据③④可以解得

那么把(F(x))展开可得

(F(x)=sum (ac^i+bd^i)x^i)

(F_n=ac^n+bd^n=frac{1}{sqrt5}[(frac{1+sqrt5}{2})^n-(frac{1-sqrt5}{2})^n])

群论

基础定义:

https://www.cnblogs.com/nosta/p/9444576.html

https://blog.csdn.net/Fredric_2014/article/details/84251441

https://blog.csdn.net/Fredric_2014/article/details/84251441

https://wenwen.sogou.com/z/q736604849.htm

https://zhidao.baidu.com/question/92977832.html

https://en.wikipedia.org/wiki/Field_(mathematics)

https://en.wikipedia.org/wiki/Algebraic_number_field

将就看一下吧(

一个域大概就是一个集合加上运算符,满足交换律集合率分配律逆元之类的,操作后的元素一定在范围内



并不知道学了一天学了什么东西

二次剩余

判断

(x^2equiv n(mod;p))的一组解,即对n开根

定义勒让德符号((frac{n}{p})=n^{frac{p-1}{2}}(mod;p)),特判掉p|n

结论:((frac{n}{q})=1)是二次剩余,(=-1)不是二次剩余

证明:

首先由于(n^{p-1}equiv 1),所以(n^{frac{p-1}{2}}equiv 1;or;-1)

①当n是二次剩余时

那么(sqrt n=n^{frac{1}{2}})有值,则(n^{frac{p-1}{2}}equiv 1)

②当n不是二次剩余时

((p-1)!)除掉1和p-1之后可以两两配对都为1(除掉1和-1之后逆元不等于自己,p^2-1=0)

所以((frac{n}{p})=-1)

计算

首先随机一个(a)使得(w=a^2-n,(frac{w}{p})=-1),由于一个平方对应两个解所以只有一半的数是/不是二次剩余,因此期望次数为2

因为ω太难写了所以就用w代替

定义域(F_p=({0,1,...,p-1})),里面有四则运算,除就是乘以逆元

定义扩域(F_{p2}={a+bsqrt w:x,yin F_p}),同样满足四则运算(类似虚数的操作),a和b都是模p意义下的整数(Fp里的)

证明一下逆元,即求(ω即√w)

解得

那么证得(F_{p2})是一个域

答案即为((a+sqrt w)^{frac{p+1}{2}})(F_{p2})下的实数部分,另一个解显然是-x

证明(以下操作均在(F_{p2})中进行):

(x=(a+sqrt w)^{frac{p+1}{2}},x^2=(a+sqrt w)^{p+1})

(=(a+sqrt w)^p(a+sqrt w))

二项式展开,根据lucas定理可以提出来一个C(0,>0)的组合数,所以组合数为0

(至于为什么可以模掉,正常来说没有整数乘实数再取模的操作,但这是在扩域下的运算所以可以)

(=(a^p+sqrt w^p)(a+sqrt w))

(=(a+sqrt w^{p-1}sqrt w)(a+sqrt w))

(=(a+(frac{w}{p})sqrt w)(a+sqrt w))

(=(a-sqrt w)(a+sqrt w))

(=a^2-(a^a-n))

(=n)

证毕,得到的是在(F_{p2})域下的解

根据拉格朗日定理(数论中的,不是群论的神仙东西),任意非0n次多项式在任何域下只有最多n个解,而(x^2equiv n(mod;p))(F_p)中有2个解,在(F_{p2})中显然也是这2个解,所以((a+sqrt w)^{frac{p+1}{2}})没有虚数部分,实数部分就是答案

那么就做完了,时间复杂度O(log)

例题

http://acm.hdu.edu.cn/showproblem.php?pid=6755

强行二合一

模10^9+9意义下5是二次剩余

code

#include <bits/stdc++.h>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
#define C(n,m) (jc[n]*Jc[m]%1000000009*Jc[(n)-(m)]%1000000009)
#define mod 1000000009
#define Mod 1000000007
#define two 500000005
#define ll long long
#define N 5
//#define file
using namespace std;

ll jc[100001],Jc[100001],w[100001],S1[100001],S2[100001],W,n,c,ans,five,s1,s2,s;
int T,K,i,j,k,l;
struct type{ll x,y;};
type operator + (type a,type b) {return {(a.x+b.x)%mod,(a.y+b.y)%mod};}
type operator - (type a,type b) {return {(a.x-b.x)%mod,(a.y-b.y)%mod};}
type operator * (type a,type b) {return {(a.x*b.x+a.y*b.y%mod*W)%mod,(a.x*b.y+a.y*b.x)%mod};}

ll qpower(ll a,ll b) {ll ans=1; while (b) {if (b&1) ans=ans*a%mod;a=a*a%mod;b>>=1;} return ans;}
ll random(int x,int y) {return (1ll*rand()*233333+rand())%(y-x+1)+x;}
ll ldr(int t) {return qpower(t,(mod-1)/2);}
void work()
{
	static type A,B;
	ll a;
	do{
	a=random(0,mod-1);W=((a*a-N)%mod+mod)%mod;
	} while (ldr(W)==1);
	
	A={1,0},B={a,1};
	i=(mod+1)/2;
	while (i)
	{
		if (i&1) A=A*B;
		B=B*B;i>>=1;
	}
	five=A.x;
}
ll js(ll p) {if (p==1) return (n+1)%mod; return (qpower(p,(n+1)%(mod-1))-1)*(qpower(p-1,Mod))%mod;}

int main()
{
	#ifdef file
	freopen("hdu6755.in","r",stdin);
	#endif
	
	srand(time(NULL));
	work();
	jc[0]=jc[1]=Jc[0]=Jc[1]=w[1]=1;
	fo(i,2,100000) w[i]=mod-w[mod%i]*(mod/i)%mod,jc[i]=jc[i-1]*i%mod,Jc[i]=Jc[i-1]*w[i]%mod;
	
	scanf("%d",&T);
	for (;T;--T)
	{
		scanf("%lld%lld%d",&n,&c,&K);ans=0;
		s1=(1ll+five)*two%mod,s2=(1ll-five)*two%mod;
		s1=qpower(s1,c%(mod-1)),s2=qpower(s2,c%(mod-1));
		S1[0]=S2[0]=1;
		fo(i,1,K) S1[i]=S1[i-1]*s1%mod,S2[i]=S2[i-1]*s2%mod;
		fo(i,0,K)
		{
			s=S1[i]*S2[K-i]%mod;
			ans=(ans+js(s)*C(K,i)*(((K-i)&1)?-1:1))%mod;
		}
		printf("%lld
",(ans+mod)%mod*qpower(five,(mod-1)-K)%mod);
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}

参考资料

https://www.zhihu.com/question/25217301/answer/158753864

https://www.cnblogs.com/nosta/p/9444576.html

https://blog.csdn.net/Fredric_2014/article/details/84251441

https://zhidao.baidu.com/question/92977832.html

https://wenwen.sogou.com/z/q736604849.htm

https://en.wikipedia.org/wiki/Algebraic_number_field

https://en.wikipedia.org/wiki/Field_(mathematics)

https://en.wikipedia.org/wiki/Lagrange%27s_theorem_(number_theory)

https://blog.csdn.net/Clove_unique/article/details/53149356

https://en.wikipedia.org/wiki/Lagrange%27s_theorem_(group_theory)(似乎并没有什么关系)

https://en.wikipedia.org/wiki/Quadratic_residue#Complexity_of_finding_square_roots

https://en.wikipedia.org/wiki/Cipolla%27s_algorithm

https://blog.csdn.net/skywalkert/article/details/52591343

https://blog.csdn.net/qq_43649416/article/details/106340787

https://www.cnblogs.com/jz-597/p/12796876.html

https://blog.csdn.net/stevensonson/article/details/85845334

https://blog.csdn.net/code92007/article/details/98104873

https://blog.csdn.net/doyouseeman/article/details/52033204

https://blog.csdn.net/kele52he/article/details/78897187

原文地址:https://www.cnblogs.com/gmh77/p/13387949.html