【Troywar love Maths】——莫比乌斯反演
2816. Troywar loves Maths
★★☆ 输入文件:Troy_1.in 输出文件:Troy_1.out 简单对比
时间限制:1 s 内存限制:256 MB
【题目描述】
众所周知,Troywar总是不好好上课看数(xiao)论(shuo)。一天数学老师是在看不下去了,于是决定考(jiao)考(xun)他一下。于是,扔给了Troywar一个问题:给定两个正整数n和m,有多少对1<=i<=n,1<=j<=m使得$a=2^{i}+1,b=2^{j}+1$满足a和b的最大公约数为3。翘课的Troywar当然不会了,他只好求助你。
【输入格式】
两个正整数n,m
【输出格式】
一个整数。
【样例输入】
10 10
【样例输出】
19
【数据范围】
1.10% n,m<=63
2.另有20%数据保证n,m<=1000
3.另有20%数据保证n<=3
4.对于所有数据,保证n,m<=1e7
【来源】
题解:
第一次出题,也不知道有没有人做……我们先把n调成n,m中小的,m为较大的。
$\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(2^{i}+1,2^{j}+1)==3]$
$首先,我们的要求是3|2^{x}+1$
$2^x+1\equiv 2^{x\,\bmod \phi(3)}+1(\bmod)3$
$所以当x为奇数时才可能成立,先令i>j$
$\;\;\;\;\gcd(2^{i}+1,2^{j}+1)=\gcd(2^{i}-2^{j},2^j+1)$
$=\gcd(2^{i-j}-1,2^j+1)$
$=\gcd (2^{i-j}+2^j,2^j+1)$
$若i-j>j$
$\gcd(2^{i}+1,2^{j}+1)=\gcd(2^{i-2j}+1,2^j+1)$
$否则$
$\gcd(2^{i}+1,2^{j}+1)=\gcd(2^{2j-i}+1,2^j+1)$
$联系辗转相除$
$\gcd(2^{i}+1,2^{j}+1)=2^{\gcd(i,j)}+1$
$所以有gcd(i,j)==1且i、j为奇数$
$\therefore Ans=\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)==1\&i、j为奇数] $
$=\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)==1]-\sum_{i=1}^{\lfloor \frac n 2\rfloor}\sum_{j=1}^{m}[gcd(i,j)==1]-\sum_{i=1}^{\lfloor \frac m 2\rfloor}\sum_{j=1}^{n}[gcd(i,j)==1]$
$=\sum_{d=1}^{n}\mu(d)\lfloor \frac m d\rfloor\lfloor \frac n d\rfloor-\sum_{d=1}^{n}\mu(d)\lfloor \frac m d\rfloor\lfloor \frac n {kd}\rfloor-\sum_{d=1}^{n}\mu(d)\lfloor \frac m {kd}\rfloor\lfloor \frac n d\rfloor$
$其中当d为奇数时,k为2,否则k为1$
对于前10%是为了给暴力分……至于n<=3是为了打表找规律,再结合前10%验证。n,m小于1000……当作给不会反演的分吧……
标程:
#define Troy 09/29/2017 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e7+; int miu[N],prim[N/],num,sum[N];
bool vis[N]; inline void init(){
miu[]=;
sum[]=;
for(int i=;i<N;i++){
if(!vis[i])
prim[++num]=i,miu[i]=-;
for(int j=;prim[j]*i<N;j++){
vis[i*prim[j]]=;
if(i%prim[j]==){
miu[i*prim[j]]=;
break;
}
miu[i*prim[j]]=-miu[i];
}
sum[i]=sum[i-]+miu[i];
}
} int n,m; int main(){ init();
freopen("Troy_1.in", "r", stdin);
freopen("Troy_1.out","w",stdout);
scanf("%d%d",&n,&m);
if(n>m) n^=m^=n^=m;
ll ans=;
for(int i=;i<=n;i++){
ll t=1ll*miu[i]*(n/i)*(m/i),d;
if(i&){
d=1ll*miu[i]*(1ll*(n/i)*(m/i/)+1ll*(n/i/)*(m/i));
}
else
d=1ll**miu[i]*(n/i)*(m/i);
ans+=t-d;
}
printf("%lld\n",ans);
}
【Troywar love Maths】——莫比乌斯反演的更多相关文章
- BZOJ3309 DZY Loves Maths 莫比乌斯反演、线性筛
传送门 推式子(默认\(N \leq M\)): \(\begin{align*} \sum\limits_{i=1}^N \sum\limits_{j=1}^Mf(gcd(i,j)) & = ...
- hdu1695 GCD(莫比乌斯反演)
题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...
- BZOJ 2154: Crash的数字表格 [莫比乌斯反演]
2154: Crash的数字表格 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 2924 Solved: 1091[Submit][Status][ ...
- BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MBSubmit: 4032 Solved: 1817[Submit] ...
- Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)
题意:求sigma{lcm(i,j)},1<=i<=n,1<=j<=m 不妨令n<=m 首先把lcm(i,j)转成i*j/gcd(i,j) 正解不会...总之最后化出来的 ...
- 莫比乌斯函数筛法 & 莫比乌斯反演
模板: int p[MAXN],pcnt=0,mu[MAXN]; bool notp[MAXN]; void shai(int n){ mu[1]=1; for(int i=2;i<=n;++i ...
- 【BZOJ-2440】完全平方数 容斥原理 + 线性筛莫比乌斯反演函数 + 二分判定
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2371 Solved: 1143[Submit][Sta ...
- POI2007_zap 莫比乌斯反演
题意:http://hzwer.com/4205.html 同hdu1695 #include <iostream> #include <cstring> #include & ...
- hdu.5212.Code(莫比乌斯反演 && 埃氏筛)
Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
随机推荐
- ORM框架--GreenDao 3.0基本使用指南
0. ORM框架--GreenDao 3.0基本使用指南 1. Gradle 的配置 这里可以参照官方的文档进行最新的配置(本示例的版本等你看到可能就不是最新的了),但是值得注意的一点是,GreenD ...
- webapi从入门到放弃(一)OWIN 自寄宿模式
1.创建web空项目 2.创建完如图 3.安装如下程序包Microsoft.AspNet.WebApi.Core (5.2.4)Microsoft.Owin.Host.SystemWeb (4.0. ...
- CRM客户关系管理系统(十一)
第十一章.学员报名流程开发 11.1.面包屑的制作 Boorstrap路径导航条 (1)table_obj_list.html页面面包屑 def table_obj_list 返回数据改成locals ...
- [转]CAS原理
在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁). 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度 ...
- python抽象类+抽象方法实现接口(interface)
#python没有类似于java和C#的接口类(interface),需要使用抽象类 和抽象方法来实现接口功能 #!/usr/bin/env python#_*_ coding:utf-8 _*_ f ...
- Jmeter(二十六)_数据驱动测试
花了一点时间做了一个通用的执行引擎,好处就是我不用再关注测试脚本的内容,而是用测试用例的数据去驱动我们执行的方向.(这个只适合单个接口的测试,具体运用到接口自动化时,还是要靠手动去编写脚本!) 首先我 ...
- Spark核心编程---创建RDD
创建RDD: 1:使用程序中的集合创建RDD,主要用于进行测试,可以在实际部署到集群运行之前,自己使用集合构造测试数据,来测试后面的spark应用流程. 2:使用本地文件创建RDD,主要用于临时性地处 ...
- JAVA小记 (1)
JVM: Java虚拟机 JVM个数取决于同时执行的程序个数 JDK:JAVA 开发工具包 Java利用JVM实行跨平台 JRE:Java运行环境 JavaSE:企业版 GC:垃圾回收机制 命名规范 ...
- Python_检查程序规范
''' 检查Python程序的一些基本规范,例如,运算符两测是否有空格,是否每次只导入一个模块,在不同的功能模块之间是否有空行,注释是否够多,等等 ''' import sys import re d ...
- Masonry 抗压缩 抗拉伸
约束优先级: 在Autolayout中每个约束都有一个优先级, 优先级的范围是1 ~ 1000.创建一个约束,默认的优先级是最高的1000 Content Hugging Priority: 该优先级 ...