第二次做这题,求前缀和的时候还是卡住了

fg函数的反演是可以直接用莫比乌斯基本代换式来代换的

#include<bits/stdc++.h>
using namespace std;
#define maxn 500005
#define ll long long bool vis[maxn];
int mu[maxn],prime[maxn],mm,num[maxn];
void init(){//顺便筛出每个数的质因子个数
mu[]=;num[]=;
for(int i=;i<maxn;i++){
if(!vis[i]){
mu[i]=-;
prime[++mm]=i;
num[i]=;
}
for(int j=;j<=mm;j++){
if(prime[j]*i>=maxn)break;
vis[i*prime[j]]=;
if(i%prime[j]==){
num[i*prime[j]]=num[i]+;
mu[i*prime[j]]=;
break;
}
else {
mu[i*prime[j]]=-mu[i];
num[i*prime[j]]=num[i]+;
}
}
}
} long long n,m,p;
int sum[maxn][];//前缀和,质因子个数,等式值
void prework(){
for(int k=;k<maxn;k++)
for(int j=;j*k<maxn;j++)
sum[j*k][num[k]]+=mu[j]; for(int i=;i<maxn;i++)
for(int j=;j<=;j++)
sum[i][j]+=sum[i][j-];
for(int i=;i<maxn;i++)
for(int j=;j<=;j++)
sum[i][j]+=sum[i-][j];
} int main(){
init();
prework();
int t;cin>>t;
while(t--){
scanf("%lld%lld%lld",&n,&m,&p);
if(n>m)swap(n,m);
if(p>=){
printf("%lld\n",n*m);
continue;
} long long ans=;
for(int l=,r;l<=n;l=r+){
r=min(n/(n/l),m/(m/l));
ans+=(sum[r][p]-sum[l-][p])*(n/l)*(m/l);
}
cout<<ans<<'\n';
}
}

莫比乌斯反演+二维前缀和——hdu4746二刷的更多相关文章

  1. Nowcoder farm ( 树状数组、二维前缀和、二维偏序 )

    题目链接 分析 : 最简单的想法当然就是去模拟 直接对每个施肥料的操作进行模拟.然后计算贡献 但是这显然会超时.这题需要换一个思维 对于一个土地(也就是二维平面上的一个点)的种类是 T' 如果它被操作 ...

  2. [CSP-S模拟测试]:任(duty)(二维前缀和)

    题目描述 $liu\_runda$退役之后就失去梦想开始咸鱼生活了……$Bilibili$夏日画板活动中,所有人都可以在一块画板上进行像素画创作.$UOJ$群有一群无聊的人决定在画板上创作一个$50\ ...

  3. openjudge1768 最大子矩阵[二维前缀和or递推|DP]

    总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...

  4. COGS1752 [BOI2007]摩基亚Mokia(CDQ分治 + 二维前缀和 + 线段树)

    题目这么说的: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它 ...

  5. poj-3739. Special Squares(二维前缀和)

    题目链接: I. Special Squares There are some points and lines parellel to x-axis or y-axis on the plane. ...

  6. Good Bye 2015 C. New Year and Domino 二维前缀

    C. New Year and Domino   They say "years are like dominoes, tumbling one after the other". ...

  7. 计蒜客模拟赛D1T1 蒜头君打地鼠:矩阵旋转+二维前缀和

    题目链接:https://nanti.jisuanke.com/t/16445 题意: 给你一个n*n大小的01矩阵,和一个k*k大小的锤子,锤子只能斜着砸,问只砸一次最多能砸到多少个1. 题解: 将 ...

  8. 二维前缀和模板题:P2004 领地选择

    思路:就是使用二维前缀和的模板: 先放模板: #include<iostream> using namespace std; #define ll long long ; ll a[max ...

  9. 二维前缀和好题hdu6514

    #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; ]; )* ...

随机推荐

  1. loj2472[九省联考2018]IIIDX

    题意:要求构造一个d的排列使得满足d[i/k]<=d[u]且字典序最大. 标程(bzoj上并不能过): #include<bits/stdc++.h> #define mid ((l ...

  2. java统计一个子串在指定字符串中出现的次数

    今天查着用了用String类里的几个方法,分享下代码 题目要求:统计一个子串在指定字符串中出现的次数( 提示java字串出现了6次) public class SearchSameString { p ...

  3. JS时间差(毫秒/天数/月份)

    var startDate = "2016-06-06"; var endDate = "2016-08-08"; var start=new Date(sta ...

  4. BZOJ 3159: 决战 解题报告

    BZOJ 3159: 决战 1 sec 512MB 题意: 给你一颗\(n\)个点,初始点权为\(0\)的有跟树,要求支持 Increase x y w 将路径\(x\)到\(y\)所有点点权加上\( ...

  5. js处理浮点数一点思考

    作为一名web开发人员,如果我们做到了涉及到费用加加减减的需求 难免会遇到浮点数的计算,就会遇到浮点数精度误差的问题 假设场景: 1.接口给你的金额单位是分,页面需要展示的金额单位为元. 最后落档金额 ...

  6. Delphi实现程序只运行一次并激活已打开的程序

    我们的程序有时候只允许运行一次,并且最好的情况是,如果程序第二次运行,就激活原来的程序.网上有很多的方法实现程序只运行一次,但对于激活原来的窗口却都不怎么好.关键就在于激活原来的程序,一般的做法是在工 ...

  7. Hdu-4757 Tree(可持久化字典树+lca)

    题目链接:点这 我的github地址:点这     Problem Description   Zero and One are good friends who always have fun wi ...

  8. Golang 标准库log的实现

      原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://gotaly.blog.51cto.com/8861157/1406905 前 ...

  9. js实现点击按钮传值

    js实现点击按钮传值 page1源码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...

  10. C++——指针与数组

    1.数组名不是指针,神似指针(可以将数组名直接赋值给指针) (1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组:(2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针 ...