Description

传送门

Solution

orz大佬yxq。。本题神仙

设g为P的原根。

设$x=g^{a}$,$y=g^{b}$。

由于$(g^{a}+g^{b})^{i}\equiv (g^{a})^{i}(mod P)$

可得$(1+g^{b-a})^{i}\geqslant 2(mod P)$。

设$g^{k}=1+g^{b-a}$($1\leq k<P-1$)(注意这里的后一个符号是<)!,故$ki\equiv 0(mod P-1)$。

可得k最小为$\frac{P-1}{gcd(P-1,i)}$,又因为k<P-1所以k的取值范围为:$k=cnt\frac{P-1}{gcd(P-1,i)}$。

其中cnt属于集合[1,gcd(P-1,i)-1]。(当cnt=gcd(P-1,i)时k恰好为P-1,且当cnt变小k一定变小,故cnt的上界为gcd(P-1,i)-1)

此处由于y是有限制(<=m)的不便处理,我们考虑当y固定时x的个数(x可以是1到p-1任意值)。

由于$g^{k}=g^{b-a}$,即$g^{k}-1=g^{b-a}$,则$x(g^{k}-1) \equiv y(modP)$。

因为$1\leq k<P-1$,所以针对不同的$g^{k}-1$会有不同的x。

根据以上推断可以分析出$f(i)=m(gcd(P-1,i)-1)$。

$ans=\sum _{i=1}^{P-1}f(i)=m\sum _{i=1}^{P-1}i(gcd(P-1,i)-1)$

$=-P(P-1)+m\sum _{i=1}^{P-1}i(P-1,i)$
$=-P(P-1)+m\sum _{d|(P-1) }d\sum _{ d|i,1\leq i\leq P-1}i[gcd(P-1,i)==d]$

$=-P(P-1)+m\sum _{d|(P-1) }d^{2}\sum_{i=1}^{\frac{P-1}{d}}i[gcd(\frac{P-1}{d},i)==1]$

$=-P(P-1)+m\sum _{d|(P-1)}d^{2}\frac{\frac{P-1}{d}\varphi(\frac{P-1}{d})+[\frac{P-1}{d}==1]}{2}$ *

*嗯我们或许还要证明一个东西。。

$\sum _{i=1}^{n}i[gcd(n,i)==1]=\frac{n\varphi(n)+[n==1]}{2}$

关于这个式子,关键点是如果gcd(n,i)=1,则gcd(n,n-i)=1。

证明。。显然吧。如果gcd(n,i)=1,$i[gcd(n,i)==1]+(n-i)[gcd(n,n-i)==1]=2n$,优秀的结论。然后这里当n=1要特判(因为此时n-i=1-1=0就不合法啦)。

接下来就可以愉快地搞事~

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const int mod=1e9+;
int m,p;
ll ans;
int getphi(int n)
{
int re=n;
for (int i=;(ll)i*i<=n;i++)
{
if (n%i==)
{
while (n%i==) n/=i;
re-=re/i;
}
}
if (n!=) re-=re/n;
return re;
}
ll _work(int d,int o)
{
return 1ll*d*d%mod*(1ll*o*getphi(o)+(o==))/%mod;
}
ll solve(int x)
{
ll re=;
for (int i=;(i*i)<=x;i++)
if (x%i==)
{
re=(re+_work(x/i,i))%mod;
if (i!=x/i) re=(re+_work(i,x/i))%mod;
}
re-=((ll)x*(x+)/)%mod;
if (re<) re+=mod;
return re;
}
int T;
int main()
{
scanf("%d",&T);
for (int tt=;tt<=T;tt++){
scanf("%d%d",&m,&p);
ans=solve(p-);
printf("Case #%d: %lld\n",tt,ans*m%mod);
}
}

[hdu6051]If the starlight never fade-[欧拉函数+原根]的更多相关文章

  1. poj1284:欧拉函数+原根

    何为原根?由费马小定理可知 如果a于p互质 则有a^(p-1)≡1(mod p)对于任意的a是不是一定要到p-1次幂才会出现上述情况呢?显然不是,当第一次出现a^k≡1(mod p)时, 记为ep(a ...

  2. poj1284(欧拉函数+原根)

    题目链接:https://vjudge.net/problem/POJ-1284 题意:给定奇素数p,求x的个数,x为满足{(xi mod p)|1<=i<=p-1}={1,2,...,p ...

  3. POJ 1284 Primitive Roots (欧拉函数+原根)

    <题目链接> 题目大意: 满足{ ( $x^{i}$ mod p) | 1 <=$i$ <= p-1 } == { 1, …, p-1 }的x称为模p的原根.给出p,求原根个数 ...

  4. hdu2588 GCD (欧拉函数)

    GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数.  (文末有题) 知 ...

  5. BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2553  Solved: 1565[Submit][ ...

  6. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  7. COGS2531. [HZOI 2016]函数的美 打表+欧拉函数

    题目:http://cogs.pw/cogs/problem/problem.php?pid=2533 这道题考察打表观察规律. 发现对f的定义实际是递归式的 f(n,k) = f(0,f(n-1,k ...

  8. poj2478 Farey Sequence (欧拉函数)

    Farey Sequence 题意:给定一个数n,求在[1,n]这个范围内两两互质的数的个数.(转化为给定一个数n,比n小且与n互质的数的个数) 知识点: 欧拉函数: 普通求法: int Euler( ...

  9. 51Nod-1136 欧拉函数

    51Nod: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1136 1136 欧拉函数 基准时间限制:1 秒 空间限制: ...

  10. 欧拉函数 - HDU1286

    欧拉函数的作用: 有[1,2.....n]这样一个集合,f(n)=这个集合中与n互质的元素的个数.欧拉函数描述了一些列与这个f(n)有关的一些性质,如下: 1.令p为一个素数,n = p ^ k,则 ...

随机推荐

  1. BZOJ3997:[TJOI2015]组合数学(DP,Dilworth定理)

    Description 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一 ...

  2. 【[SDOI2014]数数】

    被慎老师教育数位\(dp\)怎么写了 看来我数位\(dp\)的写法太落后了 这道题很显然就是一个\(AC\)自动机上的数位\(dp\),按照套路 我们可以设计\(dp[i][j][0/1]\)表示匹配 ...

  3. SQL进价2:三值逻辑和null

    1.SQL中的bool类型的值有三种 普通编程语言里的布尔型只有 true 和 false 两个值,这种逻辑体系被称为二值逻辑.而 SQL 语言里,除此之外还有第三个值 unknown,因此这种逻辑体 ...

  4. 随手练——POJ - 2676 数独 (回溯法)

    POJ - 2676 : http://poj.org/problem?id=2676: 解题思想 (大力出奇迹): 1. 依次在空格里面填上“1~9”,并检查这个数字是否合法(其所在的行.列,以及3 ...

  5. [Python 多线程] 详解daemon属性值None,False,True的区别 (五)

    本文以多个例子介绍Python多线程中daemon属性值的区别. 回顾: 前面的文章简单介绍了在现代操作系统中,每一个进程都认为自己独占所有的计算机资源. 或者说线程就是独立的王国,进程间是相对独立的 ...

  6. python执行linux和window的命令

    linux: python执行shell脚本常用的方法 import os val=os.system("shell语句")  >>> val=os.system ...

  7. POJ 1182 食物链(经典带权并查集 向量思维模式 很重要)

    传送门: http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

  8. Linux BLE 基于 树莓派

    1.参考资料:Linux(RaspberryPi)上使用BLE低功耗蓝牙 使用bluez协议栈方法有用 2.Linux下Bluez的编程实现 3.和菜鸟一起学linux之bluez学习记录2 4.BL ...

  9. LWIP2.0.2 & FreeRTOS & MQTT 客户端的 使用

    1.参考链接 :http://www.nongnu.org/lwip/2_0_x/group__mqtt.html 2.首先移植好lwip,然后添加lwip-2.0.2\src\apps\mqtt   ...

  10. 算法-求两个有序数组两两相加的值最小的K个数

    我的思路是: 用队列,  从(0,0)開始入队,每次出队的时候,选(1,0) (0,1) 之间最小的入队,假设是相等的都入队,假设入过队的就不入了,把出队的k个不同的输出来就可以 我測试了几组数据都是 ...