数论学习笔记

如题。

链接:https://h.hszxoj.com/d/hzoj/training/64ae62d5016fac9fb4da7086?uid=482

3336. cf1444A

洛谷link

小数学题。gxyz 上的很好A,但是 CF 上的数据确实超级大。

先判断 \(\displaystyle q/p\) 是否成立,若不成立则直接 cout<<p;

否则就要遍历 \(q\) 的质因数,然后再找对应质因数中 \(q\) 含有的数量,记录ans=max(ans,p/pow(i,cntp-cntq+1);

之后再判断处理过的 \(q\) 是否大于一,如果是则再次用 \(p/q\) 直到\(p \ \% \ q \ !=0\)\(p < q\) ,然后再次统计答案 ans=max(ans,p/pow(q,cnt);

然后输出答案即可。

3337. poj1845 sumdiv

**数学题。浪费我整整2天时间,还去问了数竞大佬sjh。。。

原来等比数列通项不支持取模。。。

推导:

\(\text{设 p 为质数,则}\)

\[\textstyle A=p_1^{a_1} \times p_2^{a_2} \times p_3^{a_3} \times\cdots \times p_n^{a_n} \]

\[\textstyle \ \ \ A^B=(p_1^{a_1} \times p_2^{a_2} \times p_3^{a_3} \times\cdots \times p_n^{a_n})^B \]

\[\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =\textstyle p_1^{a_1*B} \times p_2^{a_2*B} \times p_3^{a_3*B} \times\cdots \times p_n^{a_n*B} \]

$\text{易证:}A^B \text{ 的因数,可以看作是任意一个或多个 } \ p_i \ \text{ 除以任意一个或多个 }a_i $

\(\text{ 由乘法原理得, }A^B\text{ 的因数个数是:}\)

\[(a_1+1)(a_2+1)(a_3+1)\cdots(a_n+1) \]

\(\text{显然(shj说的),}A^B\text{ 的因数和是:}\)

\[SUM=\prod_{i=1}^{n}(\sum_{i=0}^{ai}{p_i^r}) \]

\(\text{考虑对每一个等比数列求和取模:}\)

\(\text{若}2 \mid k ,\)

\[sum(p,k)=\sum_{i=0}^{k}{p^i} \]

\[\ \ \ \ \ \ \ \ sum(p,k)=p^0+\sum_{i=1}^{k}{}p^i \]

\[\ \ \ \ \ \ \ \ \ \ \ \ sum(p,k)=p^0+p^1\sum_{i=0}^{k-1}{p^i} \]

\[\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ sum(p,k)=1+p \times sum(p,k-1) \]

\(\text{若}2 \nmid k ,\)

\[sum(p,k)=\sum_{i=0}^{k}{p^i} \]

\[\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ sum(p,k)=\sum_{0}^{k/2}{p^i}+\sum_{k/2+1}^{k}{p^i} \]

\[\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ sum(p,k)=\sum_{0}^{k/2}{p^i}+p^{k/2+1} \times \sum_{0}^{k/2}{p^i} \]

\[\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ sum(p,k)=\sum_{0}^{k/2} \times (p^{k/2+1}+1) \]

\[\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ sum(p,k)=sum(p,k/2)\times (p^{k/2+1}+1) \]

得解。

然后在需要取模的地方(幂运算、每次递归的\(sum(p,i)\))取个模就好了。

3338. poj2478 Farey Sequence

计算输出欧拉函数的前 \(n\) 项。

P123. 「NOIP2012」同余方程

\(ex \gcd\) 求解同余方程。

3340. 【模板】扩展欧拉定理

\[\large{ a^b \equiv \begin {cases} a^b&, b <φ(m) \\ a^{b \mod φ(m) +φ(m)}&,b \ge φ(m) \end{cases} \pmod m } \]

但是 \(b\) 太长怎么办?

那就快读的时候完成 \(b\) 的化简,即扩展欧拉定理。

然后幂运算的时候取模就行了。

完整链接:https://gxyzoj.com/d/hzoj/blog/481/658199fdb082af9540aebe8f#1702992381185

P1333. [bzoj3884]上帝与集合的正确用法

有意思的东西。

考虑扩展欧拉定理:

\[\large{ a^b \equiv \begin {cases} a^b&, b <φ(m) \\ a^{b \mod φ(m) +φ(m)}&,b \ge φ(m) \end{cases} \pmod m } \]

\[\large{ \begin{aligned} 2^{2^{2^{\dots^{2}}}} &\equiv 2^{(2^{2^{\dots^{2}}}\mod φ(p) +φ(p))} \pmod p \\ 2^{(2^{2^{\dots^{2}}}\mod φ(p) +φ(p))} &\equiv 2^{[(2^{(2^{\dots^{2}} \mod φ(p^{'}) +φ(p^{'}))}) \mod p^{'}]} \pmod p \\ &\text{其中}p^{'}=φ(p) \end{aligned} } \]

则可用递归求解。边界为 p==1 return 0

而且计算幂的时候必须用快速幂取模。

代码是这样的:

int f(int p)
{
	if(p==1) return 0;
	return binpow(2,f(euler(p))+euler(p),p);
}

P203. 倒酒

依然是采用 \(\text{exgcd}\) 求解。但是有个小东西,我是看的题解的:

x*=-1;a*=-1;
while(x<0||y<0)
{
	x+=b/g*(x<0);
	y-=a/g*(x>=0);
}

就这样吧。

P129. 乘法逆元

你说的对,但是这道题用欧拉定理做的话要轻微卡常。

P124. [SDOI2008]仪仗队

依然是欧拉定理。先线性筛,再 for(int i=1;i<n;i++) ans+=(phi[i]*2); 然后输出 ans+1

P321. 荒岛野人Savage

依然是 \(\text{exgcd}\) ,但是 \(\text{check}\) 函数里面的一些东西我还是没理解。。。

高二再来填坑吧。

bool ck(int m)
{
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
		//	if(i==j) continue;
			x=0,y=0;
			int a=p[i]-p[j],cc=c[j]-c[i];
			int g=exgcd(a,m);
			if(cc%g) continue;
			int b=m;
			a/=g,b/=g,cc/=g;
			b=abs(b);
			x=(x*cc%b+b)%b;
			if(x<=l[i]&&x<=l[j]) return 0;
		}
	}
	return 1;
}

P2303 [SDOI2012] Longge 的问题

小 * 数论题,写了一晚上加一节数学课。

$ \text{考虑 } n \text{ 的因数,有:}$

\[ ans=\sum_{i=1}^{n}[ i | n ] \times i\times\sum_{i=1}^{n}[ \gcd(i,n)=i ] \]

引理1:

\(n=d*x\) , \(i=d*y\),其中 \(d =\gcd(i,n)\) , 则:

\[\gcd(x,y)=1 \]

证明:

假设 \(\gcd(x,y) > 1\)

则不妨设 \(x=j*t\) ,\(y=k*t\) ,即 \(\gcd(x,y)=k,k > 1\)

带入 \(n,i\) 得:

\(n=d*x =d * j*t\)

\(i=d*y=d*k*t\)

易证:\(\gcd(i,n) > d\),与假设不符,即可证明引理1

引理2:

\(\text{若 }i|n\text{ ,则:}\)

\[ \sum_{i=1}^{n}[\gcd(i,n)=d]=\sum_{i=1}^{n}[\gcd(i,\lfloor \frac{n}{d} \rfloor)=1] \]

证明:
\(n=d*x\) , \(i=d*y\), 则:

\[ \begin{aligned} &\gcd(i,n)=d \\ &\gcd(i,d*x)=d \\ &\gcd(i,x)=1 \\ &\gcd(i,\lfloor \frac {n}{d}\rfloor)=1 &\end{aligned} \]

即证。

所以

\[\begin{aligned} ans&=\sum_{i=1}^{n}[\gcd(i,\lfloor \frac{n}{d} \rfloor)=1] \\ ans&=\sum_{i=1}^{n}φ(\lfloor\frac{n}{d} \rfloor) \end{aligned} \]

此时,这道题已经拿到了 \(90\) 分,那么还要考虑优化:

引理3:

\[\gcd(i,n)=\gcd(n-i,n) \]

证明:同引理1

则可优化:

\[\begin{aligned} ans&=i\sum_{i=1}^{n}φ(\lfloor\frac{n}{d} \rfloor),i|n \\ ans&=\sum_{i=1}^{\sqrt{n}}φ(\lfloor\frac{n}{d} \rfloor)+\lfloor\frac{n}{d} \rfloor*\sum_{i=1}^{\sqrt{n}}φ(i),i|n \end{aligned} \]

得解。但需要判断 \(i*i=n\) 的时候,会多算一次。

posted @ 2024-02-20 19:44  ccjjxx  阅读(10)  评论(0编辑  收藏  举报