bnu——GCD SUM (莫比乌斯反演)
题目:GCD SUM
题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=39872
算法:莫比乌斯反演、优化
#include<stdio.h>
#define N 100001
typedef long long LL;
bool pri[N]={};
int prim[N],po=;
int mu[N];
LL f[N],ff[N]; //缩短时间
/*
莫比乌斯函数mu[i]的定义:
1. 如果 i 是素数,那么mu[i]为-1;
2. 如果 i 是由多个不同的素数组成的,那么mu[i]为-1或者1,取决于质因子的数量,奇数就为-1,偶数为1
3. 如果 i 不满上面的条件,那么mu[i]为0,比如mu[4]=0;
用途:想要判断1~m中有多少数与i互质,那么首先计算出i的质因子,采用容斥定理做,排除掉所有质因子的倍数,再加上被重复计算的
比如i=6、m=20时,首先排除2的倍数,再排除3的倍数,现在6的倍数被排除两次,就加上6的倍数数量。
*/
void Init()
{
mu[]=;
for(int i=;i<N;i++)
{
if(!pri[i])
{
prim[po++]=i;
mu[i]=-;
}
for(int j=;j<po;j++)
{
LL tmp=i*prim[j];
if(tmp>=N) break;
pri[tmp]=;
mu[tmp]=mu[i]*-;
if(i%prim[j]==)
{
mu[tmp]=;
break;
}
}
}
f[]=ff[]=;
//f[]:mu的前缀和
for(int i=;i<N;i++)
{
f[i]=f[i-]+mu[i];
ff[i]=ff[i-]+mu[i]*i;
}
}
int min(int n,int m)
{
return n>m?m:n;
}
int main()
{
Init();
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
LL ans=,ansx=,ansy=;
int t=min(n,m);
int j=;
/*
简化前:
for(int i=1;i<=t;i++)
{
ans+=mu[i]*(n/i)*(m/i);
可简化原因:(n/i)*(m/i)虽然i一直在变化,但很多时候是相等的,比如15/8等于1,一直到15/15还是等于1。。。
ansx+=mu[i]*(m/i)*(i+(n/i)*i)*(n/i)/2;
...
}
n/i:得到值,随着i的增大,如果这个值一直不变,那么这些可以和在一起算。
n/(n/i):得到上面值得最大i,从上面的i到现在的i=n/(n/i),之间的n/i,都等于n/i
*/
for(int i=;i<=t;i=j+)
{
j=min(n/(n/i),m/(m/i));
ans+=(f[j]-f[i-])*(n/i)*(m/i);
ansx+=(ff[j]-ff[i-])*(m/i)*(+(n/i))*(n/i)/;
ansy+=(ff[j]-ff[i-])*(n/i)*(+(m/i))*(m/i)/;
}
printf("%lld %lld %lld\n",ans,ansx,ansy);
}
return ;
}
bnu——GCD SUM (莫比乌斯反演)的更多相关文章
- acdream 1148 GCD SUM 莫比乌斯反演 ansx,ansy
GCD SUM Time Limit: 8000/4000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatis ...
- 【BZOJ2820】YY的GCD(莫比乌斯反演)
[BZOJ2820]YY的GCD(莫比乌斯反演) 题面 讨厌权限题!!!提供洛谷题面 题解 单次询问\(O(n)\)是做过的一模一样的题目 但是现在很显然不行了, 于是继续推 \[ans=\sum_{ ...
- 【BZOJ2818】Gcd(莫比乌斯反演)
[BZOJ2818]Gcd(莫比乌斯反演) 题面 Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Ou ...
- 【HDU1695】GCD(莫比乌斯反演)
[HDU1695]GCD(莫比乌斯反演) 题面 题目大意 求\(a<=x<=b,c<=y<=d\) 且\(gcd(x,y)=k\)的无序数对的个数 其中,你可以假定\(a=c= ...
- spoj 7001. Visible Lattice Points GCD问题 莫比乌斯反演
SPOJ Problem Set (classical) 7001. Visible Lattice Points Problem code: VLATTICE Consider a N*N*N la ...
- 【HDU4947】GCD Array (莫比乌斯反演+树状数组)
BUPT2017 wintertraining(15) #5H HDU- 4947 题意 有一个长度为l的数组,现在有m个操作,第1种为1 n d v,给下标x 满足gcd(x,n)=d的\(a_x\ ...
- SPOJ PGCD 4491. Primes in GCD Table && BZOJ 2820 YY的GCD (莫比乌斯反演)
4491. Primes in GCD Table Problem code: PGCD Johnny has created a table which encodes the results of ...
- P2257 YY的GCD (莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P2257 // luogu-judger-enable-o2 /* -------------------- ...
- 【洛谷2257】YY的GCD(莫比乌斯反演)
点此看题面 大致题意: 求\(\sum_{x=1}^N\sum_{y=1}^MIsPrime(gcd(x,y))\). 莫比乌斯反演 听说此题是莫比乌斯反演入门题? 一些定义 首先,我们可以定义\(f ...
随机推荐
- 微信H5开发,页面被缓存,不更新
原文:https://blog.csdn.net/qq_27471405/article/details/79295348 这里只是备份 前言:每一次请求,我们都知道浏览器会做一定处理,其中就包括对 ...
- 【FJWC 2019】min
[FJWC 2019]min 题目描述 给你一张 \(n\) 个点 \(m\) 条边的无向图,走过每条边都需要花费 \(1\) 秒. 给你一个整数 \(k\) ,请你选择至多 \(k\) 个点,令经过 ...
- centos7下安装docker(24docker swarm 数据管理)
service的容器副本会scal up/down,会failover,会在不同的主机上创建和销毁,这就引出一个问题,如果service有数据,那么这些数据该如何存放呢? 1.打包在容器中: 显然不行 ...
- 原生javascript实现回到顶部平滑滚动
function rt() { var d = document, dd = document.documentElement, db = document.body, top = dd.scroll ...
- 90道Python面试题,做对80%直击年薪40w
转发链接: 1.一行代码实现1--100之和 利用sum()函数求和 2.如何在一个函数内部修改全局变量 函数内部global声明 修改全局变量 3.列出5个python标准库 os:提供了不少与操作 ...
- Armitage攻击winxp——P201421410029
实验简介 实验所属系列: 安全工具使用 实验对象:本科/专科信息安全专业 相关课程及专业: linux基础.网络安全 实验类别: 实践实验类 预备知识 Armitage基本介绍 Armit ...
- 一道很有意思的java线程题
这几天看结城浩的<java多线程设计模式>,跟着做一些习题,有几道题目很有意思,记录下自己的体会. 首先是题目(在原书212页,书尾有解答): public class Main { pu ...
- SQL Server连接查询之Cross Apply和Outer Apply的区别及用法(转载)
先简单了解下cross apply的语法以及会产生什么样的结果集吧!示例表: SELECT * FROM tableA CROSS APPLY tableB 两张表直接连接,不需要任何的关联条件,产生 ...
- Docker资源限制与Cgroups
一.Linux control groups 简介 Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如 ...
- zookeepeer使用java api
一.引入依赖 <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper --> <dependen ...