Bzoj3309 DZY Loves Math

Time Limit: 20 Sec  Memory Limit: 512 MB
Submit: 992  Solved: 589

Description

对于正整数n,定义f(n)为n所含质因子的最大幂指数。例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0。
给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b)。

Input

第一行一个数T,表示询问数。
接下来T行,每行两个数a,b,表示一个询问。

Output

对于每一个询问,输出一行一个非负整数作为回答。

Sample Input

4
7558588 9653114
6514903 4451211
7425644 1189442
6335198 4957

Sample Output

35793453939901
14225956593420
4332838845846
15400094813

HINT

【数据规模】

T<=10000

1<=a,b<=10^7

Source

莫比乌斯反演 脑洞题

题解传送门http://blog.csdn.net/sdfzyhx/article/details/72854335

 1 /*by SilverN*/
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<cstring>
 7 #define LL long long
 8 using namespace std;
 9 const int mxn=10000010;
10 int read(){
11     int x=0,f=1;char ch=getchar();
12     while(ch<‘0‘ || ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
13     while(ch>=‘0‘ && ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
14     return x*f;
15 }
16 int pri[mxn],cnt;
17 int mu[mxn],last[mxn],w[mxn],g[mxn];
18 bool vis[mxn];
19 LL smm[mxn];
20 void init(){
21     mu[1]=1;
22     for(int i=2;i<mxn;i++){
23         if(!vis[i]){
24             pri[++cnt]=i;last[i]=1;w[i]=1;
25             mu[i]=-1;g[i]=1;
26         }
27         for(int j=1;j<=cnt && pri[j]*i<mxn;j++){
28             int tmp=pri[j]*i;
29             vis[tmp]=1;
30             if(i%pri[j]==0){
31                 last[tmp]=last[i];
32                 w[tmp]=w[i]+1;
33                 mu[tmp]=0;
34                 if(last[tmp]==1) g[tmp]=1;
35                 else    if(w[last[tmp]]==w[tmp])g[tmp]=-g[last[tmp]];
36                         else g[tmp]=0;
37                 break;
38             }
39             last[tmp]=i;
40             mu[tmp]=-mu[i];
41             w[tmp]=1;
42             g[tmp]=(w[i]==1)?(-g[i]):0;
43         }
44     }
45     for(int i=1;i<mxn;i++)smm[i]=smm[i-1]+g[i];
46     return;
47 }
48 int a,b;
49 void solve(){
50     if(a>b)swap(a,b);
51     LL ans=0;
52     for(int i=1,pos;i<=a;i=pos+1){
53         pos=min(a/(a/i),b/(b/i));
54         ans+=(smm[pos]-smm[i-1])*(LL)(a/i)*(b/i);
55     }
56     printf("%lld\n",ans);
57     return;
58 }
59 int main(){
60 //    freopen("in.txt","r",stdin);
61     init();
62     int T=read();
63     while(T--){
64         a=read();b=read();
65         solve();
66     }
67     return 0;
68 }
时间: 2024-10-04 20:55:17

Bzoj3309 DZY Loves Math的相关文章

【莫比乌斯反演】BZOJ3309 DZY Loves Math

Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b).T<=1e4; a,b<=1e7. Solution 一开始没仔细看数据范围然后打了一个每个询问O(n)的,当然T了 (盗一张图) 一开始我按照第二行的做的,里层外层循环都和ab有关,每一层都要sqrt(n)

BZOJ3309 DZY Loves Math 【莫比乌斯反演】

题目 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b). 输入格式 第一行一个数T,表示询问数. 接下来T行,每行两个数a,b,表示一个询问. 输出格式 对于每一个询问,输出一行一个非负整数作为回答. 输入样例 4 7558588 9653114 6514903 4451211 742

【BZOJ】3309: DZY Loves Math 莫比乌斯反演优化

3309: DZY Loves Math Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b). Input 第一行一个数T,表示询问数. 接下来T行,每行两个数a,b,表示一个询问. Output 对于每一个询问,输出一行一个非负整数作为回答. Sample In

[BZOJ3568]DZY Loves Math VII

本人BZOJ的处女作. 这题题面还是蛮有趣的吧. 然后三个问题都蛮有意思的. 要保证正确性,出数据还是异常蛋疼啊. 本来各出三题的.但是考虑到是OJ上的题,就搞在一起了.这样代码量就会比较大. [BZOJ3568]DZY Loves Math VII,布布扣,bubuko.com

【BZOJ 3560】 3560: DZY Loves Math V (欧拉函数)

3560: DZY Loves Math V Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 241  Solved: 133 Description 给定n个正整数a1,a2,-,an,求 的值(答案模10^9+7). Input 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,-,an. Output 仅一行答案. Sample Input 3 6 10 15 Sample Output 1595 HINT 1<=n<=1

bzoj 3309 DZY Loves Math

LINK:DZY Loves Math 一道比较有意思的数论题 原谅我的智障多调了40min. 可以简单的推式子推出 答案为\(\sum{w=1}^n\frac{n}{w}\frac{m}{w}\sum{x|w}\mu(x)f(\frac{w}{x})\) f函数定义和题目中一致. 考虑后面前缀和怎么求 发现光求f(x)复杂度都比较高.如果我们把f(x)求出再调和级数预处理 那得GG 1e7过不了log+根号 考虑考虑一下\(\mu\)和f的这种形式肯定值有局限 设后面的东西为g(x) 不难发现

【bzoj3309】DZY Loves Math 莫比乌斯反演+线性筛

题目描述 对于正整数x,定义f(x)为x所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0.给定正整数n,m,求$\sum\limits_{i=1}^n\sum\limits_{j=1}^mf(\gcd(i,j))$ 输入 第一行一个数T,表示询问数.接下来T行,每行两个数n,m,表示一个询问. 输出 对于每一个询问,输出一行一个非负整数作为回答. 样例输入 4 7558588 9653114 6514903 445121

bzoj 3309 DZY Loves Math - 莫比乌斯反演 - 线性筛

对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b). Input 第一行一个数T,表示询问数. 接下来T行,每行两个数a,b,表示一个询问. Output 对于每一个询问,输出一行一个非负整数作为回答. Sample Input 4 7558588 9653114 6514903 445

Bzoj3481 DZY Loves Math III

Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 310  Solved: 65 Description Input Output Sample Input 3 1 2 3 2 4 2 Sample Output 6 HINT 1<=N<=10,0<=Qi<=10^18,1<=Pi<=10^18,P>=2 本题仅四组数据. Source By Jc 数学问题 欧拉函数 Miller-Rabin Pollard-rho 花了