HDU 1695 GCD
来源:互联网 发布:全境封锁优化怎么样 编辑:程序博客网 时间:2024/05/16 15:01
用f(i)表示gcd为i的数对有多少,用F(i)表示gcd为i的倍数的数有多少,
莫比乌兹反演就是一个公式,如果符合这个公式,才能用。F[i]一半来说非常好求,一半都是用容斥原理容易超时用这个
#include <iostream>#include <stdio.h>#include <string.h>#define ll long longusing namespace std;const int MAXN = 150000;bool check[MAXN+10];int prime[MAXN+10];int mu[MAXN+10];void mobius()//莫比乌兹函数获得U(n/d)打表{ memset(check,false,sizeof(check)); mu[1]=1; int tot=0; for(int i=2;i<=MAXN;i++) { if(!check[i]) { prime[tot++]=i; mu[i]=-1; } for(int j=0;j<tot;j++) { if(i*prime[j]>MAXN)break; check[i*prime[j]]=1; if(i%prime[j]==0) { mu[i*prime[j]]=0; break; } else { mu[i*prime[j]]=-mu[i]; } } }}int main(){ int a,b,c,d,k; int t; cin>>t; mobius(); int case1=0; while(t--) { cin>>a>>b>>c>>d>>k; if(b>d)swap(b,d); if(!k) { printf("Case %d: 0\n", ++case1); continue; } long long ans1=0,ans2=0; for(int i=k;i<=b;i+=k) { ans1+=(long long) mu[i/k]*(b/i)*(d/i); ans2+=(long long) mu[i/k]*(b/i)*(b/i); } printf("Case %d: %I64d\n", ++case1, ans1-(ans2-1)/2); } return 0;}
0 0
- HDU 1695 GCD 数论
- hdu 1695 GCD
- hdu 1695 GCD
- HDU 1695 GCD (数论)
- hdu 1695 GCD
- HDU 1695 GCD
- HDU 1695 GCD
- HDU - 1695 GCD
- HDU 1695 GCD
- HDU 1695 GCD
- HDU 1695 GCD
- HDU 1695 GCD
- HDU 1695 GCD
- hdu 1695 GCD
- 【HDU】 1695 GCD
- HDU 1695 GCD
- HDU 1695GCD
- HDU 1695 GCD
- 数据结构实验之链表九:双向链表
- 51nod 1174 区间中最大的数
- Android安全与逆向之简单破解APK方法
- Windows系统启动顺序
- 51nod 1179 最大的最大公约数
- HDU 1695 GCD
- 数据结构实验之数组一:矩阵转置
- #1014 : Trie树
- 51nod 1181 质数中的质数(质数筛法)
- 51nod 1182 完美字符串
- 动态规划-hdu1203
- 关于ArrayList和Vector空间利用率的一点探索
- Android Studio 之ndk
- 九项重要的职业规划提示