CSU 1325 莫比乌斯反演
题目大意:
一、有多少个有序数对(x,y)满足1<=x<=A,1<=y<=B,并且gcd(x,y)为p的一个约数;
二、有多少个有序数对(x,y)满足1<=x<=A,1<=y<=B,并且gcd(x,y)为p的一个倍数。
第一行两个数:p和q。(1<p<10^7 ,1<q<1000。)
接下来有q行,每行两个数A和B。(1<A,B<10^7)
我们先考虑第二个问题 ,很简单答案就是 (A/p) * (B/p) , 因为从p开始每次叠加p枚举到A,B中间得到的数都是可以任意选择,gcd()的值必然是p的倍数的
我们考虑第一个问题,这里约数的个数不超过数字n的2sqrt(n)个
所以我们可以枚举出每一个约数k,然后对k进行求和
对于使用莫比乌斯反演求和的话只是从当前来说复杂度大概是
O(q*lg(p)*(sqrt(A)+sqrt(B)) //sqrt(A)是因为对莫比乌斯数组求前缀和进行快速计算,这是莫比乌斯中常出现的方式
为了较低复杂度,我们列式计算考虑降维
如下列公式所示:
最后是如何计算sum[t],能计算出sum[]数组的话,t最大不超过min(A,B)那么总复杂度就能降为O(q*(sqrt(A)+sqrt(B))就没问题了
这里t只跟k,d有关系,那么只要枚举每一个k,d就能得到sum[t]的数组了
for(int i=0 ; i<cnt ; i++){
for(int d=1 ; d*fac[i]<=M ; d++){
sum[d*fac[i]] += mu[d];
}
}
for(int i=1 ; i<=M ; i++) sum[i] += sum[i-1];
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath> using namespace std;
#define ll long long
#define N 10005
#define M 10000000
int p,q,a,b,cnt;
int fac[N];
int mu[M+] , prime[M/] , tot , sum[M];
bool check[M+]; void get_mu()
{
mu[] = ;
for(int i= ; i<=M ; i++){
if(!check[i]){
mu[i] = -;
prime[tot++] = i;
}
for(int j= ; j<tot ; j++){
if((ll)prime[j]*i>M) break;
check[prime[j]*i] = true;
if(i%prime[j]==) break;
else mu[i*prime[j]] = -mu[i];
}
}
} void init()
{
int v = (int)sqrt(p+0.5);
for(int i= ; i<=v ; i++){
if(p%i==){
fac[cnt++] = i;
if(p/i!=i) fac[cnt++] = p/i;
}
}
} void pre_solve()
{
for(int i= ; i<cnt ; i++){
for(int d= ; d*fac[i]<=M ; d++){
sum[d*fac[i]] += mu[d];
}
}
for(int i= ; i<=M ; i++) sum[i] += sum[i-];
} ll cal(int a , int b)
{
ll ans = ;
for(int t= , last ; t<=a ; t=last+){
last = min(a/(a/t) , b/(b/t));
ans += (ll)(sum[last]-sum[t-])*(a/t)*(b/t);
}
return ans;
} int main()
{
get_mu();
scanf("%d%d" , &p , &q);
init();
pre_solve();
while(q--){
scanf("%d%d" , &a , &b);
if(a>b) swap(a , b);
printf("%lld %lld\n" , cal(a,b) , (ll)(a/p)*(b/p));
}
}
CSU 1325 莫比乌斯反演的更多相关文章
- CSU 1325: A very hard problem 中南月赛的一道题。
1325: A very hard problem Time Limit: 3 Sec Memory Limit: 160 MBSubmit: 203 Solved: 53[Submit][Sta ...
- 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 ...
随机推荐
- Java在Web开发语言上败给了PHP
PHP的主要语言开发者之一.Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言.他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java ...
- transient
“transient”——“瞬态”,先不说这个翻译是否恰当,这个变量关键字一直不曾使用,简单的说就是被瞬态定义的变量不可序列号.或者这么给他换个名字——“不可序列化状态”.打个比方,如果一个用户有一些 ...
- javscript 中的术语和俚语
语言中俚语和方言.在JavaScript中也有一些俚语或者说是术语,看似奇淫巧技,还是有一些用处,有三种语言组件可以来构造术语:强转.逻辑运算符和位变换. 1.强转:在javascript和大部分的语 ...
- selenium处理Ajax浮动框方法
package com.allin.pc;import java.util.List;import org.openqa.selenium.WebElement;import org.openqa.s ...
- MySQL Workbench 6 不能删除数据等问题(“Error Code: 1175”) 和入门教程
网络资料收集 当用MySQL Workbench进行数据库的批量更新时,执行一个语句会碰到以下错误提示: Error Code: 1175 You are using safe...without a ...
- PHP-----二维数组和二分查找
二维数组由行和列组成.由arr[$i][$j]表示,先后表示行和列,类似于坐标点. 打印二维数组-----通过两次遍历,第一次遍历每一行,第二次遍历每一行的具体元素,并且通过使用count($arr[ ...
- TCP连接的状态与关闭方式及其对Server与Client的影响
TCP连接的状态与关闭方式及其对Server与Client的影响 1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用. ...
- RedHat3.4安装GIT
1.首先到官网上下载git包,地址为http://git-scm.com/download 注意:选择下载Older releases 2.输入命令tar zxvf git-1.7.9.4.tat.g ...
- 推荐流程设计器http://www.processon.com/
以前一直用的Rational Rose进行类图,流程设计,最近发现了ProcessOn使用了下,感觉很好用,相比rose 1.有中文说明,rose全专业英文,理解起来比较费劲: 2.直线比较直,ros ...
- Oracle_双机备份
1.dataguard http://jingyan.baidu.com/article/f96699bb956ef2894e3c1b39.html http://blog.itpub.net/262 ...