开坑,填坑——莫比乌斯反演

hdu 1695

题目:给出x和y的范围,要求gcd(x,y)==k的数对个数。

思路:首先把范围除k,然后就是求gcd(x,y)=1的数对个数。具体莫比乌斯公式的用法还不是很懂,目前的理解是这样的:

莫比乌斯公式给出了一个从和函数反演到原函数的方法。对于一个定义在正整数上的函数,其和函数F(n)定义为所有f(d)|d是n的因子的和。然后根据莫比乌斯公式,可由F求得f。

但是此题的形式有点不同。设f(k)表示gcd(x,y)=k的数对的个数。然后设F(k)表示gcd(x,y)=k的倍数的数对的个数。然后F是f的和函数,但是形式变成了这样:F(n)定义为所有f(d)|d是n的倍数的和。此时应用莫比乌斯函数的形式不变。

/*
* @author:  Cwind
*/
//#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <map>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <queue>
#include <stack>
#include <functional>
#include <set>
#include <cmath>
using namespace std;
#define IOS std::ios::sync_with_stdio (false);std::cin.tie(0)
#define pb push_back
#define PB pop_back
#define bk back()
#define fs first
#define se second
#define sq(x) (x)*(x)
#define eps (1e-3)
#define IINF (1<<29)
#define LINF (1ll<<59)
#define INF 1000000000
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> P;

zconst int MAXN = 1000000;
bool check[MAXN+10];
int prime[MAXN+10];
int mu[MAXN+10];
void Moblus(){
    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]] = true;
            if( i % prime[j] == 0){
                mu[i * prime[j]] = 0;
                break;
            }
            else{
                mu[i * prime[j]] = -mu[i];
            }
        }
    }
}

int a,b,c,d,k;
int T;
int cas=0;
int main(){
    freopen("/home/files/CppFiles/in","r",stdin);
    //freopen("defense.in","r",stdin);
    //freopen("defense.out","w",stdout);
    cin>>T;
    Moblus();
    while(T--){
        cin>>a>>b>>c>>d>>k;
        if(k==0){
            printf("Case %d: 0\n",++cas);
            continue;
        }
        ll ans1=0,ans2=0;
        if(b>d) swap(b,d);
        b/=k,d/=k;
        for(int i=1;i<=b;i++){
            ans1+=mu[i]*(ll)(b/i)*(d/i);
        }
        for(int i=1;i<=b;i++){
            ans2+=mu[i]*(ll)(b/i)*(b/i);
        }
        printf("Case %d: %lld\n",++cas,ans1-ans2/2);
    }
    return 0;
}

时间: 2024-10-12 22:32:30

开坑,填坑——莫比乌斯反演的相关文章

云计算之OpenStack实战记(二)与埋坑填坑

3.6 Nova控制节点的部署 创建nova用户,并加入到service项目中,赋予admin权限 [[email protected] ~]# source admin-openrc.sh [[email protected] ~]# openstack user create --domain default --password=nova nova +-----------+----------------------------------+ | Field     | Value   

云计算之OpenStack实战记(一)与埋坑填坑

一.了解Openstack 1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运行自己的云计算和存储设施.Rackspace与NASA是最初重要的两个贡献者,前者提供了"云文件"平台代码,该平台增强了OpenStack对象存储部分的功能,而后者带来了"Nebula"平台形成了OpenStack其余的部分.而今,OpenStack基金会已经有150多个会员,包括很多知名公司如"Canonical.DEL

Flexbox微信踩坑填坑记

Flexbox的大名很早就有了解过,只是之前一直是开发PC端的页面,对这个东西还不是很敢造次去用.近期的项目是移动端开发,正好,内心一激动,就大大咧咧地开始用flexbox布局了.中间踩过的一些坑,以及将来可能还会踩到的坑,都在这里记录一下. 关于flexbox,有一篇文章讲的还是很透彻的,图文并茂,有兴趣的戳链接了解下.一篇很屌很好的文章 在用flexbox之前,很多人最关心的应该还是兼容性的问题.个人一直觉得,前端程序员的使命,就是要推进终端用户去使用最先进的浏览器.当然,现实是骨感的,我们

tensorboard的可视化小白踩坑填坑之路

  首先说tensorflow这个框架是真的很是强大,图像的识别,以及神经网络的构建,还有就是不得不说的可视化工具tensorboard,这个工具一般是伴随着tensorflow的安装而安装的,但是对于一个踩坑的我来说,我的tensorflow-gpu安装后居然没有tensorboard的路径以及可执行tensorboard.py的程序,这就使我很是抓狂, 1.我跑了一个特tensorflow的程序后生成一个日志文件在window的cmd下执行了一下(稍后我会介绍怎么生成日志以及实现tensor

自制Amiibo 踩坑/填坑 指南

去年买了台老版NS,后来得知有Amiibo这种东西的存在,但是学校附近都买不到. 再后来网上看见有人在X宝卖自制卡片,就寻思着是否能自己 DIY一套,于是掉坑里. 要想使用自制Amiibo,一共要做两件事: 1.DIY Amiibo 2.使用Ammibo 一.DIY Amiibo 材料:NTAG 215白卡(若干).NFC安卓手机(1部) 软件:TAGMO 说干就干,先去猫家买来白卡(卡片式和纽扣式各20片),收到快递后迫不及待拆包测试. 由于之前手机上安装了TAGMO,所以就按照教程一步步操作

FreeSWITCH 安装配置的 各种坑, 填坑

个人安装环境: OS:CentOS6.7 64位 FreeSWITCH Ver:1.6.17 一. 编译出错 安装 之前, 最好 先安装 这几个东西(如果有, 请忽略): yasm (有nasm的话 不用装这个) , opus-devel(可能 提示 libopus-dev 或 libopus-devel 等) , lua-devel , libsndfile-devel , libtiff-devel 当然了,  你也可以 先不管, 等 出错 提示了, 在按照下面的方法安装: 1. 安装 ya

踩坑(Running)填坑(ZSSURE):DevExpress的XtraTabControl、Telerik的OpenAccessContext以及StarUML

题记: 今天好友在朋友圈分享了一篇有深度的好文"请鼓励你的孩子做个幸福普通人",文章略显长,细细品读下来感触颇多.加之最近天天看着小外甥大睿睿的一步步的成长,已渐渐远离年轻稚嫩.走向成熟稳重的我对学习有了新的认识,回想起自己的成长过程,经验和技能并非是父母手把手教导的,反而是他们给我营造的"自由.开放.甚至略显放纵"的环境.他们以身作则的行动,让我从中体会.感悟出了所有的点点滴滴. 说到现在从事的软件研发工作,想想同学中毕业鲜有留下来做技术的(姑且认为IT民工也属于

LCT 填坑系列

清华冬令营 T1用了LCT 这个东西以前有写过 然而并不熟练 发现没了板子根本就不会写 只能填一填坑辣 BZOJ 2843 LCT 1 #include <bits/stdc++.h> 2 #define N 30010 3 #define ls c[x][0] 4 #define rs c[x][1] 5 using namespace std; 6 7 inline int read() 8 { 9 int x=0,f=1; char ch=getchar(); 10 while(ch&l

初涉node.js做微信测试公众号一路填坑顺便发现个有趣的其他漏洞

[微信测试公众号] 半年前耍着玩搭起来的“微信简历”,是LAMP版的,很皮毛. 微信的官方文档在这 http://mp.weixin.qq.com/wiki/index.php 1.获取access token 2.自定义菜单创建,直接在调试工具上做了 http://mp.weixin.qq.com/debug 3.接入指南(接入自己的网站) 4.接收微信消息,判断消息类型,判断消息关键字(比如来自哪个按钮),响应消息 这里有个小坑,不同类型的消息数据结构略有不同,判空最好做细致点. [V2.0

F2eTest和UI Recorder自动化测试环境部署填坑记录

坑1:尝试部署的时候只在opennode.bat里面填写了两个浏览器,测试通过后再增加其他浏览器,页面上一直不显示.需要清空数据库里的`wd_browsers`和`wd_nodes`表,然后重启2008,数据库会重新加载新的节点信息.(此坑的解决方法在视频教程里,无文字版) 坑2:远程连接问题:在2008启动之后,node暂未启动前,f2etestweb页面可以打开3个浏览器页面.当webdriver云上显示node已经启动之后,f2etestweb页面只能可以打开1个浏览器页面,再多就会报连接