BZOJ2045 双亲数

2301的弱化版。。。(弱过头了的说)

真是。。。为什么2301都1A了这道题却1RE+1A啊。。。蒟蒻到底了。。。

什么时候搞懂了在写题解什么的。。。

 1 /**************************************************************
 2     Problem: 2045
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:360 ms
 7     Memory:9596 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #include <cmath>
12 #include <algorithm>
13
14 using namespace std;
15 typedef long long ll;
16 const int N = 1000005;
17 int u[N], p[N], tot;
18 bool v[N];
19
20 inline int read(){
21     int x = 0;
22     char ch = getchar();
23     while (ch < ‘0‘ || ch > ‘9‘)
24         ch = getchar();
25
26     while (ch >= ‘0‘ && ch <= ‘9‘){
27         x = x * 10 + ch - ‘0‘;
28         ch = getchar();
29     }
30     return x;
31 }
32
33 void pre_work(){
34     u[1] = 1;
35     int i, j, K;
36     for (i = 2; i < N; ++i){
37         if (!v[i])
38             p[++tot] = i, u[i] = -1;
39         for (j = 1; i * p[j] < N && j <= tot; ++j){
40             v[K = i * p[j]] = 1;
41             if (i % p[j] == 0){
42                 u[K] = 0;
43                 break;
44             }else u[K] = -u[i];
45         }
46     }
47     for (i = 2; i < N; ++i)
48         u[i] += u[i - 1];
49 }
50
51 ll work(int n, int m, int k){
52     n /= k, m /= k;
53     if (n > m) swap(n, m);
54     ll res = 0;
55     int i, last;
56     for (i = 1; i <= n; i = last + 1){
57         last = min(n / (n / i), m / (m / i));
58         res += (ll) (u[last] - u[i - 1]) * (n / i) * (m / i);
59     }
60     return res;
61 }
62
63 int main(){
64     pre_work();
65     int a = read(), b = read(), k = read();
66     printf("%lld\n", work(a, b, k));
67     return 0;
68 }

时间: 2024-08-06 16:02:27

BZOJ2045 双亲数的相关文章

【BZOJ2045】双亲数 莫比乌斯反演

[BZOJ2045]双亲数 Description 小D是一名数学爱好者,他对数字的着迷到了疯狂的程度. 我们以d = gcd(a, b)表示a.b的最大公约数,小D执著的认为,这样亲密的关系足可以用双亲来描述,此时,我们称有序数对(a, b)为d的双亲数. 与正常双亲不太相同的是,对于同一个d,他的双亲太多了 >_< 比如,(4, 6), (6, 4), (2, 100)都是2的双亲数. 于是一个这样的问题摆在眼前,对于0 < a <= A, 0 < b <= B,有

2045: 双亲数

2045: 双亲数 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 659  Solved: 302[Submit][Status][Discuss] Description 小D是一名数学爱好者,他对数字的着迷到了疯狂的程度. 我们以d = gcd(a, b)表示a.b的最大公约数,小D执著的认为,这样亲密的关系足可以用双亲来描述,此时,我们称有序数对(a, b)为d的双亲数. 与正常双亲不太相同的是,对于同一个d,他的双亲太多了 >_< 比如

BZOJ 2045: 双亲数

2045: 双亲数 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 848  Solved: 406[Submit][Status][Discuss] Description 小D是一名数学爱好者,他对数字的着迷到了疯狂的程度. 我们以d = gcd(a, b)表示a.b的最大公约数,小D执著的认为,这样亲密的关系足可以用双亲来描述,此时,我们称有序数对(a, b)为d的双亲数. 与正常双亲不太相同的是,对于同一个d,他的双亲太多了 >_< 比如

双亲数 容斥

小D是一名数学爱好者,他对数字的着迷到了疯狂的程度.我们以d = gcd(a, b)表示a.b的最大公约数,小D执著的认为,这样亲密的关系足可以用双亲来描述,此时,我们称有序数对(a, b)为d的双亲数.与正常双亲不太相同的是,对于同一个d,他的双亲太多了 >_<比如:(4, 6), (6, 4), (2, 100)都是2的双亲数.于是一个这样的问题摆在眼前,对于0 < a <= A, 0 < b <= B,有多少有序数对(a, b)是d的双亲数? 题意就是求满足0&l

【题解】Luogu P4450 双亲数

原题传送门 这题需要运用莫比乌斯反演(懵逼钨丝繁衍) 设F(t)表示满足gcd(x,y)%t=0的数对个数,f(t)表示满足gcd(x,y)=t的数对个数,实际上答案就是f(d) 这就满足莫比乌斯反演的关系式了 显然我们珂以得知F(t)=(b/t)*(d/t) 我们根据反演的第二个公式便珂以得出 \[f(d)=\sum_{n|d}\mu(\frac{d}{n})F(d)\] 在用下整除分块就过了 #include <bits/stdc++.h> #define N 1000005 #defin

JZYZOJ 1375 双亲数 莫比乌斯反演

http://172.20.6.3/Problem_Show.asp?id=1375 网上搜推理图. 有一段没有写莫比乌斯反演都快忘了..数学能力--,定理完全不会推,但是这道题整体来说应该是比较好写的(虽然我没写出来) 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namesp

P4450 双亲数

思路 同zap-queries 莫比乌斯反演的板子 数据范围小到不用整除分块... 代码 #include <cstdio> #include <algorithm> #include <cstring> #define int long long using namespace std; int mu[1010000],isprime[1010000],iprime[1010000],cnt,n,m,d; void prime(int n){ isprime[1]=t

[P4450] 双亲数 - 莫比乌斯反演,整除分块

模板题-- \[\sum\limits_{i=1}^a\sum\limits_{j=1}^b[(i,j)=k] = \sum\limits_{i=1}^a\sum\limits_{j=1}^b[k|i][k|j][({i\over k},{j\over k})=1]=\sum\limits_{i=1}^{a\over k}\sum\limits_{j=1}^{b\over k}[(i,j)=1]\] 继续化简 \[\sum\limits_{i=1}^{b\over k}\sum\limits_{

数论十题

数论十题 Problem Zero:[neerc2011]Gcd guessing game 现在有一个数x,1 ≤ x≤ n,告诉你n,每次你可以猜一个数y,如果x==y则结束,否则返回gcd(x,y),问最少只要几次就可以保证猜出答案. 本题纯属娱乐.仅仅是一个GCD的游戏,跑题了. 因为本题要求最坏情况,我们直观地猜想就是每次返回都是1.由于答案有可能是质数,而判定一个数,必须要把含有这个质因子的数问一遍.于是,我们引出这样一个思路,将所有1-n的质数分组,每组的积<=n,答案就是组数.