zoukankan      html  css  js  c++  java
  • 小清新数论题泛做

    1、bzoj3481 DZY Loves Math III

    (xy equiv Q pmod {P})的解的组数。以乘积形式输入(P,Q)
    题解
    一来直接把P拆质因子转成多个方程最后求乘积。
    现在考虑(xy equiv Q pmod {pi^{ai}})的解的组数。
    (p=pi^{ai}, Q=pi^{bi})
    假设枚举x
    则答案为 sigma gcd(x,p) 其中[gcd(x,p) | q]
    改成枚举d=gcd(x,p)
    或者说枚举gcd有几个pi因子
    则答案为 sigma d* (sigma x: [gcd(x,p/d) == 1]) 其中d | gcd(p,Q)
    这是因为你x含有的pi因子不能比d多,所以gcd(x,p/d) == 1
    这个是欧拉函数
    答案为 (sum_{d | gcd(p,Q)} d*φ(p/d))
    枚举i从0至(min(a_i,b_i)),算一下就行,要用公式把(φ(p^a))拆开
    (φ(p^a)=p^a*(p-1)/p (a>0))
    注意指数为0特判即可
    Q等于0也要特判
    (注意)一个小trick:(gcd(i,a)==b iff gcd(i/a,b/a)==1)

    2、无能为力

    pic1
    数据范围(10^9)
    题解
    比较毒瘤
    细节超多
    (1)发现i=0时原式值为1,所以先不考虑0最后加上
    (2)按照套路,大胆猜测斐波那契循环节为(P-1)要不然没法做。。。
    (3)拆质因子发现(P-1=961749330=2 * 3 * 5 * 17 * 29 * 65027)
    (4)发现枚举(i)没有前途,于是枚举 (gcd(i,n)=d),然后发现$ dbinom{n}{d} $ 和 (x^d) 直接算即可
    (5)考虑求满足(gcd(i,n)=d)(y^i)之和
    (gcd(i,n)==d iff gcd(i/d,n/d)==1)
    即求满足(gcd(i/d,n/d)==1)(y^i)之和
    (n/d)的质因子暴力容斥
    设枚举到(n/d)的一个因子为(U)
    则贡献为$ sum_{k=1}^{N/U} y^{Uk} $
    这个式子的值可以分治+快速幂解决

    (6)然后发现(5)在模(961749331)意义下有二次剩余,求Fib数列直接做就可以了

    3、Function


    数据范围(10^{18})
    题解
    推式子题
    上来先打表
    扔进OEIS
    发现一个很不显然的规律
    $f(n)= sum_{i^2 | n} {frac{n}{i^2}} ( 于是我们愉快的枚举)i^2$即可
    这样枚举范围就变成(10^9)
    可以推出(Ans=sum_{i=1}^{sqrt{n}} frac{left lfloor frac{n}{i^2} ight floor * (left lfloor frac{n}{i^2} ight floor + 1)}{2})
    数论分块即可。
    注意本题卡(cmath)(sqrt())精度
    传入参数时转成(long double)可以解决
    速度垫底不知道为什么QwQ

    4、Function(2)


    数据范围(10^9),多测。
    题解
    推式子题
    上来先打表
    发现一个不是很显然的规律
    (d(n))表示约数个数函数:
    (sum_{i|n} {μ(i)d(n/i)^2} = d(n^2))
    数据范围(10^9)
    我会暴力!
    分块打表即可,由于30kb大小限制,块大小顶多设(500000)
    交上去发现(TLE)
    略加优化:块内的某个位置从两端逼近,比如(F(999888))(F(1000000))来计算,而(F(2002333))(F(2000000))来计算
    常数减小一倍,就通过了。

    5、Ceil it!

    数据范围 N<=(10^{18})

    题解(纯图片)

    6、Road

    题意及数据范围:
    (sum_{i=1}^N G^i*i^M,Nle 10^9,Mle 50,G)(A*A)的矩阵,(Ale 50)

    题解:
    (tag):分治,倍增,二项式定理,矩阵乘法
    因为二项式定理同样适用于矩阵,矩阵的乘法、加法也可以直接运算,因此我们可以把(G)直接当常数做。
    (F(n,m))表示(sum_{i=1}^n G^i*i^m)
    答案为(F(N,M))
    直接递推求(F(N,M))复杂度显然不可接受。
    考虑快速幂形式的倍增:
    (F(2n,m))
    (=sum_{i=1}^{2n} G^i*i^m)
    (=sum_{i=1}^n G^i*i^m + G^nsum_{i=1}^n G^i*(i+n)^m)
    (=F(n,m)+G^nsum_{i=1}^n G^isum_{j=0}^m dbinom{m}{j} i^j n^{m-j})
    (=F(n,m)+G^nsum_{j=0}^m dbinom{m}{j} n^{m-j}sum_{i=1}^n G^ii^j)
    (=F(n,m)+G^nsum_{j=0}^m dbinom{m}{j} n^{m-j} F(n,j))

    (i)维护(F(i,0...m))
    然后做快速幂
    复杂度(O(MA^3logN))

    7、Fib

    求第(K)大的满足条件的自然数(N)
    (1)N在Fibnacci数列中。
    (2)N是完全平方数。
    若不存在输出(-1)
    (Kle 10^9)

    题解
    只有(1,1,144)符合要求。

    8、求(dbinom{n}{p} pmod{p})

    (p)是质数,(3le ple nle 10^{1000})

    题解
    手玩Lucas
    答案即(left lfloor frac{n}{p} ight floor)
    高精度除法膜法

    9、最大公约数

    (GCD(dbinom{2N}{1},dbinom{2N}{3},...,dbinom{2N}{2N-1})),答案对(1000000007)取模
    (Nle 10^{100000})

    题解
    (lowbit(2N))

    10、简单数论题

    题目描述:
    给三个两两互质的数 (a,b,c),以及另一个数 (m), 现在他希望找到三个((0,m))内的整数(x,y,z)
    使得(x^a+y^b=z^c pmod{m})(10^5)组数据,(a,b,c,mle 10^9)

    Sol:
    (2)的方幂构造答案即可。
    具体的,
    构造(p imes a=q imes b=t)
    这样得到((2^p)^a+(2^q)^b=2 imes 2^t=2^{t+1})
    只要用(exgcd)搞出(2^{t+1}=(2^k)^c)的满足条件的(k)(t)就构造出一组((x,y,z))了。
    然后要注意(exgcd)求得的一对(x,y)要把调整成正数。

    11、(Atcoder) ModularPowerEquation

    让你构造方程(n^xequiv xpmod m)的一个正整数解。
    (n,mle 10^9)
    你的答案不超过(2*10^{18})

    Sol:
    使用欧拉定理,
    令$$xequiv ypmod {φ(m)},(x,y>0)$$
    以及$$xequiv n^xequiv n^ypmod m$$
    继续可推出$$yequiv n^ypmod{gcd(m,φ(m))}$$
    注意到这与原问题形式一致,故递归求解得到一个(y)
    此时使用(EXCRT)算法,求出(x)的值,注意时刻保持(x,y>0),当求出(x=0)时把(x+=M)就好
    关于EXCRT算法相关的一些问题可以参考这里 https://www.cnblogs.com/bestwyj/p/10409806.html
    但是以上过程感觉还是有一些疑点,这里说一下个人理解:
    (1)首先我一来就是上的扩展欧拉定理,但是那个(+φ(p))不太能处理。
    后来发现由于某些奇怪的原因直接写成欧拉定理就挺对的。
    (2)题目中要求无解打"-1",但根据实测情况并不会出现无解,尽管全程(Assert(c\%d==0)),但EXCRT一直工作成功。随了(10^4)左右组数据也没出现什么问题。

    12、中学数论题

    设第 (n) 个素数是 (l),证明对于任意整数 (0le kle n) 都可以找到一个长度为 (l) 的正整数区间 ([i,i+l-1]) 使得其区间素数个数等于 (k)

    Sol:离散介值随便做一做

    13、number

    (n(le 10^{18})),要你求所有 (x) 满足 (n|x)(n=d(x))(x) 的和,取模输出或者报告有无穷个。

    Sol:
    对于 (nge 6),可以证明若 (n) 有平方因子,则答案为 inf,可以通过在爆搜的过程中构造方案证明。
    对于 (nge 6)(n) 无平方因子,根据爆搜的做法,显然转化为 (omega(n)) 个点的二分图匹配计数,可以状压DP。

  • 相关阅读:
    MybatisPlus学习笔记4:全局策略配置
    函数的参数
    函数参数作业
    函数基本使用的作业
    函数的基本使用
    文件处理作业
    文件处理b模式和指针
    用户登入注册作业
    文件处理作业
    文件处理
  • 原文地址:https://www.cnblogs.com/bestwyj/p/10290207.html
Copyright © 2011-2022 走看看