gcd 题解
gcd
Little White learned the greatest common divisor, so she plan to solve a problem: given \(x, n,\)
query \(\sum_{a=1}^n\sum_{b=1}^ngcd(x^a−1,x^b−1)\)Input
The first line of input is an integer T ( 1≤T≤300)
For each test case ,the single line contains two integers x and n ( 1≤x,n≤1000000)Output
For each testcase, output a line, the answer mod 1000000007
Sample Input
5
3 1
4 2
8 7
10 5
10 8Sample Output
2
24
2398375
111465
111134466
思路:
\(ans=\sum_{i=1}^n(x^i-1)\sum_{j=1}^{\lfloor \frac{n}{i} \rfloor}\phi(j)\)
证明:
设\(a>b\)
\((x^a-1,x^b-1)=(x^a-x^b,x^b-1)=(x^b(x^{a-b}-1),x^b-1)\)
\(\because (x^b,x^b-1)=1\)
\(\therefore (x^b(x^{a-b}-1),x^b-1)=(x^{a-b}-1,x^b-1)=(x^{a\%b-1},x^b-1)=(0,x^{(a,b)-1})=x^{(a,b)}-1\)
优化:
如果用朴素,时间复杂度\(O(Tn)\),会\(TLE\)
因为\(\lfloor \frac{n}{i} \rfloor\)只会有\(2\sqrt{n}\)个值,我们考虑整除分块和等比数列求和。
\(\mathfrak{Talk\ is\ cheap,show\ you\ the\ code.}\)
#pragma GCC optimize("Ofast")
#include<cstdio>
#include<algorithm>
using namespace std;
# define Type template<typename T>
# define read read1<int>()
Type inline T read1()
{
T t=0;
bool ty=0;
char k;
do k=getchar(),(k=='-')&&(ty=1);while('0'>k||k>'9');
do t=(t<<3)+(t<<1)+(k^'0'),k=getchar();while('0'<=k&&k<='9');
return ty?-t:t;
}
# define fre(k) freopen(k".in","r",stdin);freopen(k".out","w",stdout)
# define int long long
# define mod 1000000007ll
int l,r,phi[1000001],pri[1000001],s,m;
void work1(const int r=1000000)
{
phi[1]=1;
for(int i=1;i++^r;)
phi[i]=i;
for(int i=2;i<=r;++i)
{
if(phi[i]==i)
pri[++pri[0]]=i,phi[i]=i-1;
for(int j=1;j<=pri[0]&&pri[j]*i<=r;++j)
if(i%pri[j])phi[i*pri[j]]=phi[i]*(pri[j]-1);
else{phi[i*pri[j]]=phi[i]*pri[j];break;}
}
for(int i=0;i++^r;phi[i]=(phi[i]+phi[i-1])%mod);
}
int qkpow(int n,int m)
{
if(!m)return 1;
int t=qkpow(n,m>>1);
t=t*t%mod;
if(m&1)t=t*n%mod;
return t;
}
int que(int l,int r)
{
if(s==1)return r-l+1;
return qkpow(s,l)*(qkpow(s,r-l+1)-1)%mod*qkpow(s-1,mod-2)%mod;
}
void work()
{
s=read,m=read;
int ans=0,l=0,r=1;
while(l<m)
{
ans+=(que(l+1,r)-r+l)*(phi[m/r]*2-1)%mod;
ans%=mod;
l=r;
if(l==m)break;
r=m/(m/(l+1));
}
/*for(int i=0;i++^m;)
ans=(ans+(a[i]-1)*(phi[m/i]*2-1))%mod;*/
printf("%lld\n",(ans+mod)%mod);
}
signed main()
{
work1();
for(int T=read;T--;work());
return 0;
}
/*
(x^a-1,x^b-1)=(x^a-1,x^b-x^a)=(x^a-1,(x^(b-a)-1)*x^a)
=(x^a-1,x^(b-a)-1)=(x^a-1,x^(b%a)-1)
*/
gcd 题解的更多相关文章
- HDU5726:GCD——题解
题目:hdu的5726 (我原博客的东西,正好整理过来,属于st表裸题) (可以看出我当时有多么的菜--) 这道题写了一遍,然而蒟蒻的我的时间爆炸了-- 于是看了一下学长的代码(顺便在此处%一下学长) ...
- 洛谷 P2568 GCD 题解
原题链接 庆祝一下:数论紫题达成成就! 第一道数论紫题.写个题解庆祝一下吧. 简要题意:求 \[\sum_{i=1}^n \sum_{j=1}^n [gcd(i,j)==p] \] 其中 \(p\) ...
- BZOJ2820:YY的GCD——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2820 Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...
- CC DGCD:Dynamic GCD——题解
https://vjudge.net/problem/CodeChef-DGCD https://www.codechef.com/problems/DGCD 题目大意: 给一颗带点权的树,两个操作: ...
- CH 4302 Interval GCD 题解
题意 给定一个长度为N的数列A,以及M条指令 (N≤5* 10^5, M<=10^5),每条指令可能是以下两种之一: "C l r d",表示把 A[l],A[l+1],-, ...
- [洛谷2257]YY的GCD 题解
整理题目转化为数学语言 题目要我们求: \[\sum_{i=1}^n\sum_{i=1}^m[gcd(i,j)=p]\] 其中 \[p\in\text{质数集合}\] 这样表示显然不是很好,所以我们需 ...
- 洛谷 P2257 YY的GCD 题解
原题链接 庆祝: 数论紫题 \(T4\) 达成! 莫比乌斯 \(T1\) 达成! yy 真是个 神犇 前记 之前我觉得: 推式子,直接欧拉筛,筛出个 \(\phi\),然后乱推 \(\gcd\) 就行 ...
- Codeforces Round #271 (Div. 2)题解【ABCDEF】
Codeforces Round #271 (Div. 2) A - Keyboard 题意 给你一个字符串,问你这个字符串在键盘的位置往左边挪一位,或者往右边挪一位字符,这个字符串是什么样子 题解 ...
- 区间加值,区间gcd, 牛客949H
牛客小白月赛16H 小阳的贝壳 题目链接 题意 维护一个数组,支持以下操作: 1: 区间加值 2: 询问区间相邻数差的绝对值的最大值 3: 询问区间gcd 题解 设原数组为\(a\), 用线段树维护\ ...
随机推荐
- 万张PubFig人脸数据实现基于python+OpenCV的人脸特征定位程序(1)
在最近刷今日头条以及其他媒体软件时,经常会发现一些AI换脸的视频,于是我想,可不可以自己实现一个可以进行人脸识别的软件程序.我的具体流程是先配合python网络爬虫先进行万张PubFig人脸公共图片的 ...
- Java中关于位运算的面试题
位运算的效率是最高的,因为位位运算是直接对二进制进行操作 位运算只能应用于整型和char类型(char类型可以看做是特殊的无符号的整形) 面试题: a: 判断一个数是否是奇数 a & 1 == ...
- Java开发环境系列:一篇能解决你99%问题的排雷日记
安装 https://archive.apache.org/dist/tomcat/ 推荐使用免安装版的Tomcat(放在没有中文和空格的目录下),前提是已经安装了JDK并配置了环境变量.Linu ...
- Spring cloud简单学习总结
微服务简介 一.spring boot和spring cloud 的关系 spring boot来写各个拆分出来的微服务,spring cloud把各个微服务联系起来,比如各个微服务通过eurke找 ...
- NioCopy文件
步骤: 1.创建输入输出流 fis fos 2.创建通道 fis.getchannel() fos.getchannel(); 3.创建缓存区 ByteBuffer buffer = ...
- 【Java_基础】Java中强制类型转换
首先,狭义上的强制类型转换指的是引用类型,且是父类向子类转换,这种转换只牵扯到引用名义类型的转换,具体的对象内存没有发生一点变化. 而基本类型的转换与此不同,其数据确实发生了变化.如果是基本类型和其包 ...
- Kubernetes port-forward
命令格式: kubectl port-forward <pod_name> <forward_port> --namespace <namespace> --add ...
- vector、ArryList、LinkedList的区别与联系
vector.ArryList.LinkedList的区别与联系 vectory类:底层 采用数组结构算法,使用了线程锁(synchronized),线程安全,但是性能相对ArryList比较低. A ...
- Comet OJ 夏季欢乐赛 篮球校赛
Comet OJ 夏季欢乐赛 篮球校赛 题目传送门 题目描述 JWJU注重培养学生的"唱,跳,rap,篮球"能力.于是每年JWJU都会举办篮球校赛,来给同学们一个切磋篮球技术的平台 ...
- iview form表单数值类型校验「iview自定义form表单校验器」
摘录iview表单验证 Form 组件基于 sync-validator 实现的数据验证,给 Form 设置属性 rules,同时给需要验证的 FormItem 设置属性 prop 指向对应字段即可. ...