BZOJ 1101 Zap
2016-04-20 23:35
232 查看
莫比乌斯反演裸题。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #define maxn 50050 using namespace std; int n,a,b,d,pre[maxn],miu[maxn],prime[maxn],cnt=0; bool vis[maxn]; void make_table() { miu[1]=1; for (int i=2;i<=maxn;i++) { if (vis[i]==false) { prime[++cnt]=i; miu[i]=-1; } for (int j=1;j<=cnt && i*prime[j]<=maxn;j++) { vis[i*prime[j]]=true; if (i%prime[j]!=0) miu[i*prime[j]]=-miu[i]; else { miu[i*prime[j]]=0; break; } } } for (int i=1;i<=maxn;i++) pre[i]=pre[i-1]+miu[i]; } int find(int a,int b,int d) { int i=1,ans=0; if (a>b) swap(a,b); while (i<=(a/d)) { int j; if ((a/(i*d)==0) || (b/(i*d)==0)) j=0; else j=min((a/d)/((a/d)/i),(b/d)/((b/d)/i)); ans+=(pre[j]-pre[i-1])*(a/(i*d))*(b/(i*d)); i=j+1; } return ans; } void work() { scanf("%d%d%d",&a,&b,&d); printf("%d\n",find(a,b,d)); } int main() { scanf("%d",&n); make_table(); for (int i=1;i<=n;i++) work(); return 0; }
相关文章推荐
- 创建laravel的model控制器的命令和表
- (一)启动你的 Expres
- leetcode之三数之和 II
- 音频开发ijkplayer小结 android
- POJ1251 Kruskal
- C++函数对象-谓词
- POJ1251 Kruskal
- 166. Fraction to Recurring Decimal
- 练习二1012
- 【编程练习】最近准备开始找工作,这篇文章作为一个code练手题目的总结吧
- 找规律类博弈(4)
- java中volatile关键字的含义
- 【编程练习】最近准备开始找工作,这篇文章作为一个code练手题目的总结吧
- linux上nginx的安装启动以及配合php-fpm的使用
- fragment简单有用的一些细节
- fzu 1896 神奇的魔法数字(数位dp)
- 专题二 第四道题
- Assembly——一个简单的程序
- 搭建SpringMVC+MyBatis开发框架六
- HTML5新特性之WebRTC