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));
}
}

【hdu6051】If the starlight never fade的更多相关文章

  1. 关于【bootstrap】中,【tooltip】的不算bug的bug的个人看法

    先说下遇到这个问题的背景吧. 就是在页面中有个div,这个div右上角(或者其他位置)有个 × 的图标(这个图标添加tooltip工具提示),光标移到这个图标时,触发tooltip,提示“点击移除”这 ...

  2. 使用【 ajax 】【 bootstrap 】显示出小窗口 详情内容 一些代码意思可以参考下一个文章

    使用[ bootstrap ]显示出小窗口  详情内容 显示页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...

  3. 【Unity】4.6 灯光

    分类:Unity.C#.VS2015 创建日期:2016-04-11 一.简介 灯光(Light,也叫光源)是每一个场景的重要组成部分,用于照亮场景和对象,从而让游戏具有自己的个性和风格,比如利用灯光 ...

  4. 【Unity】4.3 地形编辑器

    分类:Unity.C#.VS2015 创建日期:2016-04-10 一.简介 Unity拥有功能完善的地形编辑器,支持以笔刷绘制的方式实时雕刻出山脉.峡谷.平原.高地等地形.Unity地形编辑器同时 ...

  5. C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi

    C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...

  6. 【转载】C# 开源库大全非常好

    原文地址:http://m.blog.csdn.net/woddle/article/details/37311877 C#开源大全 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMuk ...

  7. 【Bootstrap5】精细学习记录

    [Bootstrap5]精细学习记录 Bootstrap模板 <!DOCTYPE html> <html> <head> <title>Bootstra ...

  8. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  9. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

随机推荐

  1. Python异常(基础) except

    为什么要异常处理机制:在程序调用层数较深时,向主调函数传递错误信息需要层层return 返回比较麻烦,用异常处理机制可以较简单的传送错误信息 什么是错误 错误是指由于逻辑或语法等导致一个程序已无法正常 ...

  2. hbase 预分区

    转载 http://www.cnblogs.com/bdifn/p/3801737.html

  3. linux-ubuntu配置通过22端口远程连接

    当安装好ubuntu后获取到对应主机的ip地址,要想通过类似xshell这样的远程连接工具连接到ubuntu主机,需要在你刚刚安装好的ubuntu主机上安装openssh这个软件,才能通过远程来连接u ...

  4. 6. B树

    一.B 树是一种多叉平衡查找树 相较于二叉结构的红黑树,B 树是多叉结构,所以在元素数量非常多的情况下,B 树的高度不会像二叉树那么大,从而保证查询效率. 一棵含 n 个结点的 B 树的高度 h = ...

  5. 《linux内核分析》 第一周

    20135130  王川东 计算机是如何工作的? 计算机的基本原理是存储程序和程序控制.预先要把指挥计算机如何进行操作的指令序列(称为程序)和原始数据通过输入设备输送到计算机内存贮器中.每一条指令中明 ...

  6. Java 学习笔记 ------第六章 继承与多态

    本章学习目标: 了解继承的目的 了解继承与多态的关系 知道如何重新定义方法 认识java.lang.object 简介垃圾回收机制 一.继承 继承是java面向对象编程技术的一块基石,因为它允许创建分 ...

  7. Java中switch可以接收的数据类型

    Java支持的数据类型有五种 他们分别是: byte.char.short.int.enum: 以上是JDK1.6以前的版本. JDK1.7时,又增加了String, public class Tes ...

  8. 团队Alpha冲刺(八)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  9. 福大软工1816:Beta总结

    第三视角Beta答辩总结 博客链接以及团队信息 组长博客链接 成员信息(按拼音排序) 姓名 学号 备注 张扬 031602345 组长 陈加伟 031602204 郭俊彦 031602213 洪泽波 ...

  10. Swift-属性监听

    监听属性的改变(开发中使用很多) oc中长是重写set方法 swift通过属性监听器 class Dog: NSObject { var name:String?{ // 属性监听器 // 属性即将改 ...