【hdu6051】If the starlight never fade

hdu6051题的原根解法及公式推导
本文围绕hdu6051题展开,介绍了野路子的打表观察法,重点阐述了正解思路。利用奇质数P的原根g及其性质,对原式进行转化和推导,得到f(i)的表达式,进而将问题转化为求和式的计算,通过大力化式子和运用黑科技得出最终式子,最后根号求φ并枚举因数求解。

Portal --> hdu6051

Solution

​  神仙题qwq好吧我个人感觉是神仙题

​​  这题其实有一个比较野路子的做法。。就是。。打表观察。。反正场上ckw大佬就是这样把这题A穿的%%%

​​  然而实际上正解很神秘或者说很妙。。虽然说是不是用原根是。。套路?反正记录一下:

​​  注意到\(P\)是奇质数,那么我们可以找到一个模\(P\)意义下的原根\(g\)

​​  然后因为原根具有一些十分优秀的性质(存在唯一的\(a\)满足\(g^a=x\),其中\(x\in [1,p),a\in [1,p)\))所以我们可以开始快乐了

​  我们记\(x=g^a,y=g^b(a,b\in [1,p))\),那么原来求\(f(i)\)的式子可以变成:
\[ \begin{aligned} (x+y)^i\equiv x^i(mod\ P)\Rightarrow (1+g^{b-a})^i\equiv 1(mod\ P) \end{aligned} \]
​​  (就是两边同除以\(x^i\)

​  然后因为\(1+g^{b-a}>=2\),所以一定存在唯一一个\(k\in [1,p-1)\)满足:
\[ g^k\equiv1+g^{b-a}(mod \ P) \]
​  所以我们可以把上面的式子写成:
\[ g^{ki}\equiv 1(mod\ P) \]
​  也就是说\((P-1)|ki\)(因为原根的性质并且\(g^{P-1}\equiv 1 (mod\ P)\)),那么考虑\(k\)的取值,我们可以把\(k\)写成这样:
\[ k=\frac{s(P-1)}{i}=\frac{s'(P-1)}{gcd(P-1,i)} \]
​  然后因为\(k\in [1,P-1)\),所以\(s'\in [1,gcd(P-1,i))\),所以\(k\)总共有\(gcd(P-1,i)-1\)种取值

​​  这个时候反过来想,这\(gcd(P-1,i)-1\)种取值,对应的是那么多个不同的\(k\),再反推回去对应的就是那么多个\(b-a\)的取值,也就是说当\(b\)固定的时候,也就是\(y\)固定的时候,有那么多个\(a\)可以取(也就是说有那么多个\(x\)可以取),即对于每一个\(y\),能取的\(x\)都有\(gcd(P-1,i)-1\)

​  那所以\(f(i)=m(gcd(P-1,i)-1)\)

​​  (可以这样一路推上去都是因为原根那个一一对应的性质,否则不能进行这么神秘的操作)

​  那所以我们的问题变成了求:
\[ \sum\limits_{i=1}^{P-1}i\cdot m(gcd(P-1,i)-1) \]
​​  这个时候我们就要开始大力化式子了qwq:
\[ \begin{aligned} &\sum\limits_{i=1}^{P-1}i\cdot m(gcd(P-1,i)-1)\\ =&m(\sum\limits_{i=1}^{P-1}i\cdot gcd(P-1,i)-\sum\limits_{i=1}^{P-1}i)\\ =&m\sum\limits_{d|(P-1)}d\sum\limits_{d|i,1<=i<=P-1}i[gcd(P-1,i)=d]-\frac{m(P-1)(P-2)}{2}\\ =&m\sum\limits_{d|(P-1)}d^2\sum\limits_{i=1}^{\frac{P-1}{d}}i[gcd(\frac{P-1}{d},i)=1]\\ \end{aligned} \]
​​  这个时候我们需要一个黑科技:
\[ \begin{aligned} &\sum\limits_{i=1}^{n}i[gcd(n,i)=1]\\ =&\frac{1}{2}\sum\limits_{i=1}^n (i+(n-i))[gcd(n,i)=1]\\ =&\frac{n}{2}\sum\limits_{i=1}^n [gcd(n,i)=1]\\ =&\frac{n\cdot \varphi(n)}{2} \end{aligned} \]
​​  具体为什么的话就是。。如果说我们知道\(gcd(n,i)=1\),我们可以推出\(gcd(n,n-i)=1\),因为如果\(gcd(n,n-i)=x(x>1)\),那么\(i=n-(n-i)\)应该也是\(x\)的倍数,所以\(gcd(n,i)\neq 1\)(最少为\(x\)),所以矛盾,得证

​​  然后我们把每一对\(i\)\(n-i\)凑在一起就是上面那个式子的样子了

​  然后对于\(n=1\)的情况需要特判一下就是如果\(n=1\)那么应该是等于\(1\),也就是\(\frac{n\cdot \varphi(n)+[n=1]}{2}\)

​  

​​  然后有了这个黑科技我们就可以得到最终的式子:
\[ \begin{aligned} \sum\limits_{i=1}^{P-1}if(i) =m\sum\limits_{d|(P-1)}d^2\frac{\frac{P-1}{d}\cdot \varphi(\frac{P-1}{d})+[\frac{P-1}{d}=1]}{2} \end{aligned} \]
​​  然后\(\varphi\)的话直接根号求,然后枚举一下因数就好了

​  

​​  代码大概长这个样子

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MOD=1e9+7,inv2=500000004;
int n,m,P,ans,T;
int mul(int x,int y){return 1LL*x*y%MOD;}
int add(int x,int y){return (1LL*x+y)%MOD;}
int Phi(int x){
    int ret=1;
    for (int i=2;i*i<=x;++i){
        if (x%i==0) ret=mul(ret,(i-1)),x/=i;
        while (x%i==0) ret=mul(ret,i),x/=i;
    }
    if (x>1) ret=mul(ret,(x-1));
    return ret;
}
int calc(int n){
    int ret=0,x,tmp;
    for (int i=1;i*i<=n;++i){
        if (n%i) continue;
        x=n/i;
        tmp=add(mul(Phi(x),x),(x==1));
        tmp=mul(1LL*i*i%MOD,tmp);
        ret=add(ret,tmp);

        if (i*i==n) continue;
        x=i;
        tmp=add(mul(Phi(x),x),(x==1));
        tmp=mul(1LL*(n/i)*(n/i)%MOD,tmp);
        ret=add(ret,tmp);
    }
    ret=mul(ret,inv2);
    ret=add(ret,MOD-(1LL*(n+1)*n/2)%MOD);
    return ret;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("a.in","r",stdin);
#endif
    int tmp,x;
    scanf("%d",&T);
    for (int o=1;o<=T;++o){
        scanf("%d%d",&m,&P);
        ans=calc(P-1);
        printf("Case #%d: %d\n",o,mul(m,ans));
    }
}

转载于:https://www.cnblogs.com/yoyoball/p/9553361.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值