BZOJ4407: 于神之怒加强版

4407: 于神之怒加强版

Time Limit: 80 Sec  Memory Limit: 512 MB
Submit: 779  Solved: 368
[Submit][Status][Discuss]

Description

给下N,M,K.求

Input

输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示。

Output

如题

Sample Input

1 2
3 3

Sample Output

20

HINT

1<=N,M,K<=5000000,1<=T<=2000

思路{

  把该式变成枚举gcd

  Ans=(min(n,m))∑(i=1) (i^k)*F(i) F(d)=∑(1<=i<=n,,1<=j<=m)(d|gcd(i,j))

  套路莫比乌斯反演得F(n)=∑(n|d)(n/d)*(m/d)*μ(d/n)

  Ans=(min(n,m))∑(i=1) (i^k)* ∑(i|d)(n/d)*(m/d)*μ(d/i)

  套路把(n/d)*(m/d)提前

  Ans=(min(n,m)) ∑(D=1) (n/D)*(m/D)*∑(i|D) μ(D/i)*(i^k)

  关键就是后面这个东东=∑(i|D) μ(D/i)*(i^k)

  设G(D)=∑(i|D) μ(D/i)*(i^k).为狄利克雷卷积形式(然而我不知道有什么卵用)

  然后打表发现它是一个积性函数,线性筛就可以了.

}

#include<bits/stdc++.h>
#define RG register
#define il inline
#define db double
#define LL long long
#define N 5000010
#define mod 1000000007
using namespace std;
LL p[N],k,t,n,m;bool vis[N];
LL Q[N],F[N];
LL qp(LL a,LL b){
  if(!b)return 1;if(b==1)return a;
  LL tmp=qp(a,(b>>1));
  tmp=(tmp*tmp)%mod;
  if(b&1)tmp=(tmp*a)%mod;
  return tmp;
}
void make(){
  F[1]=1;
  for(LL i=2;i<N;++i){
    if(!vis[i])p[++p[0]]=i,Q[i]=qp((LL)i,k),F[i]=(Q[i]-1+mod)%mod;
    for(int j=1;j<=p[0]&&p[j]*i<N;++j){
      vis[p[j]*i]=true;
      if(i%p[j])F[p[j]*i]=(F[i]*F[p[j]])%mod;
      else {F[p[j]*i]=(F[i]*Q[p[j]])%mod;break;}
    }
  }
  for(int i=2;i<N;++i)F[i]+=F[i-1],F[i]%=mod;
}
void work(){
  LL Ans(0);
  for(LL l=1,r;l<=n;l=r+1){
    r=min(n/(n/l),m/(m/l));
    Ans+=(((F[r]-F[l-1]+mod)%mod)*(((LL)(n/l)*(LL)(m/l))%mod))%mod;
    if(Ans>=mod)Ans-=mod;
  }cout<<Ans<<"\n";
}
int main(){
  scanf("%lld%lld",&t,&k);make();
  while(t--){
    scanf("%lld%lld",&n,&m);
    if(n>m)swap(n,m);work();
  }return 0;
}

  

时间: 2024-10-21 20:21:31

BZOJ4407: 于神之怒加强版的相关文章

【BZOJ4407】于神之怒加强版(莫比乌斯反演)

[BZOJ4407]于神之怒加强版(莫比乌斯反演) 题面 BZOJ 求: \[\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)^k\] 题解 根据惯用套路 把公约数提出来 \[\sum_{d=1}^nd^k\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]\] 再提一次 \[\sum_{d=1}^nd^k\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]\] 后面这个东西很显然可以数论分块+莫比乌斯反演做到\(O(\

BZOJ 4407 于神之怒加强版

题目链接:于神之怒加强版 这个式子还是很妙的,只是我已经思维僵化了 \begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^k \\=&\sum_{g=1}^ng^k\sum_{i=1}^{\lfloor \frac{n}{g} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{g} \rfloor}\sum_{d|i,d|j}\mu(d) \\=&\sum_{g=1}^ng^k\sum_{d=1}^{\lflo

bzoj 4407 于神之怒加强版 (反演+线性筛)

于神之怒加强版 Time Limit: 80 Sec  Memory Limit: 512 MBSubmit: 1184  Solved: 535[Submit][Status][Discuss] Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. Output 如题 Sample Input 1 2 3 3 Sample Output 20

【bzoj4407】于神之怒加强版 莫比乌斯反演+线性筛

题目描述 给下N,M,K.求 输入 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. 输出 如题 样例输入 1 2 3 3 样例输出 20 题解 莫比乌斯反演+线性筛 $\sum\limits_{i=1}^n\sum\limits_{j=1}^m\gcd(i,j)^k\\=\sum\limits_{d=1}^{\min(n,m)}d^k\sum\limits_{i=1}^n\sum\limits

【bzoj 4407】于神之怒加强版

Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行,每行为两个正整数N,M,其意义如上式所示. Output 如题 Sample Input 1 2 3 3 Sample Output 20 HINT 1<=N,M,K<=5000000,1<=T<=2000 题解: (建议调一下缩放,博客园的数学公式正常缩放看起来比较恶心……) $ans=\sum_{i=1}^{n}\s

●BZOJ 4407 于神之怒加强版

题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4407 题解: 莫比乌斯反演 直接套路化式子 $\begin{align*}ANS&=\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)^k(接下来先枚举gcd的值g,然后求出有多少对(i,j)的gcd=g) \\&=\sum_{g=1}^{min(n,m)}g^k\sum_{d=1}{\frac{n}{g}\mu(d)\lfloor \frac{n}{gd} \

bzoj 4407 于神之怒加强版 —— 反演+筛积性函数

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4407 推导如这里:https://www.cnblogs.com/clrs97/p/5191506.html 然后发现 \( F(D) \) 是一个积性函数,可以筛质数的同时筛出来: 首先,单个质数 \( p \) 时只有 \( d=1 \) 和 \( d=p \) 两个因数,所以 \( F[p] = p^{k} - 1 \) 然后如果筛到互质的数,直接把 \( F() \) 相乘即可:

于神之怒加强版 (莫反)

题目链接: 点击这里 首先哦,令n<=m,我们来化简式子: \[ \sum_{i=1}^n\sum_{j=1}^mgcd(i,j)^k \] 设gcd(i,j)=d,则可以变成这样: \[ \sum_{i=1}^n\sum_{j=1}^md^k\\] 把d提到前面去,来枚举d: \[ \sum_{d=1}^nd^k\sum_{i=1}^{\lfloor{\frac{n}{d}}\rfloor}\sum_{j=1}^{\lfloor{\frac{m}{d}}\rfloor}[gcd(i,j)=1]

P4449 于神之怒加强版

题目大意: 求 \[\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}gcd(i,j)^k\] 首先很套路地推出 \[ret=\sum\limits_{T=1}^{n}\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum\limits_{t|T}t^k\mu(\frac{T}{t})\] 然后我们发现,前面直接除法分块就好了,关键是后面怎么办 我们设 \[f(T)=\sum\limits_{t|T}t^k\