码迷,mamicode.com
首页 > 其他好文 > 详细

zoj 3435 spoj 7001 莫比乌斯反演

时间:2015-03-05 17:08:21      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:algorithm   组合数学   莫比乌斯反演   

zoj 3435
题意:
给出3个数a,b,c, 定义一个立方体,这个立方体有a*b*c个点,每个点的坐标都是整数(x,y,z),求经过坐标(1,1,1)和另外任意一个点(x1,y1,z1)的不同的直线有多少条。

限制:
2 <= a,b,c <= 1e6; 有200组数据。

思路:
有3种情况:
1. x1,y1,z1都大于等于2:
问题就变成求1 <= x <= a-1 && 1 <= y <= b-1 && 1 <= z <= c-1 && gcd(x,y,z)=1的三元组有多少对。
用莫比乌斯反演来做。
设f(k)为gcd(x,y,z)=k的三元组(x,y,z)的数目,
设F(k)为gcd(x,y,z)为k的倍数的三元组(x,y,z)的数目,所以F(k)=floor((a-1)/k)*floor((b-1)/k)*floor((c-1)/k),然后加上一个分段就可以解决了。
2. x1,y1,z1中有1个为1
然后问题就退化成2为的互质问题了,同样可以用莫比乌斯反演来做。
3. x1,y1,z1中有2个为1
有3条直线。

分别考虑好3种情况后加起来即可。



spoj 7001 和上面那道题差不多

zoj 3435 spoj 7001 莫比乌斯反演

标签:algorithm   组合数学   莫比乌斯反演   

原文地址:http://blog.csdn.net/whai362/article/details/44082759

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!