2045: 双亲数

2045: 双亲数

Time Limit: 10 Sec  Memory Limit: 259 MB
Submit: 659  Solved: 302
[Submit][Status][Discuss]

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,有多少有序数对(a, b)是d的双亲数?

Input

输入文件只有一行,三个正整数A、B、d (d <= A, B),意义如题所示。

Output

输出一行一个整数,给出满足条件的双亲数的个数。

Sample Input

5 5 2

Sample Output

3

【样例解释】

满足条件的三对双亲数为(2, 2) (2, 4) (4, 2)

HINT

对于100%的数据满足0 < A, B < 10^ 6

Source

第一届“NOIer”全国竞赛

题解:基本上同BZOJ2301,就是大大弱化了= =

 1 /**************************************************************
 2     Problem: 2045
 3     User: HansBug
 4     Language: Pascal
 5     Result: Accepted
 6     Time:1448 ms
 7     Memory:11944 kb
 8 ****************************************************************/
 9
10 const maxn=1500000;
11 var
12    i,j,k,l,m,n,x1,y1,x2,y2,z:longint;
13    a,b:array[0..maxn] of longint;
14 procedure swap(var x,y:longint);
15           var z:longint;
16           begin
17                z:=x;x:=y;y:=z;
18           end;
19 function doit(x,y:longint):int64;
20          var i,j,k:longint;
21          begin
22               doit:=0;
23               if x>y then swap(x,y);
24               if x=0 then exit(0);
25               i:=1;
26               while i<=x do
27                     begin
28                          if (x div (x div i))<(y div (y div i)) then
29                             k:=x div (x div i)
30                          else k:=y div (y div i);
31                          inc(doit,(b[k]-b[i-1])*int64(x div i)*int64(y div i));
32                          i:=k+1;
33                     end;
34          end;
35 begin
36      for i:=2 to maxn do
37          begin
38               if a[i]<>0 then continue;
39               for j:=i to maxn div i do a[i*j]:=i;
40          end;
41      b[1]:=1;
42      for i:=2 to maxn do
43          if a[i]=0 then b[i]:=-1 else
44             if ((i div a[i]) mod a[i])=0 then b[i]:=0 else
45                b[i]:=-b[i div a[i]];
46      for i:=2 to maxn do b[i]:=b[i]+b[i-1];
47      readln(n,m,l);
48      writeln(doit(n div l,m div l));
49      readln;
50 end.
时间: 2024-10-06 00:16:49

2045: 双亲数的相关文章

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,他的双亲太多了 >_< 比如

【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,有

双亲数 容斥

小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

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 ********

【题解】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,答案就是组数.