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]=true;
    mu[1]=1;
    for(int i=2;i<=n;i++){
        if(!isprime[i]){
            iprime[++cnt]=i;
            mu[i]=-1;
        }
        for(int j=1;j<=cnt&&iprime[j]*i<=n;j++){
            isprime[iprime[j]*i]=true;
            mu[iprime[j]*i]=-mu[i];
            if(i%iprime[j]==0){
                mu[iprime[j]*i]=0;
                break;
            }
        }
    }
}
signed main(){
    prime(1000100);
    scanf("%lld %lld %lld",&n,&m,&d);
    if(n<m)
        swap(n,m);
    int ans=0;
    for(int i=1;i<=n/d;i++){
        ans+=mu[i]*(m/(i*d))*(n/(i*d));
    }
    printf("%lld\n",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/dreagonm/p/10458420.html

时间: 2024-08-29 23:46:59

P4450 双亲数的相关文章

【题解】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

[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_{

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

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

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

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

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

数论十题

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