题目: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 (莫比乌斯反演)的更多相关文章

  1. acdream 1148 GCD SUM 莫比乌斯反演 ansx,ansy

    GCD SUM Time Limit: 8000/4000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatis ...

  2. 【BZOJ2820】YY的GCD(莫比乌斯反演)

    [BZOJ2820]YY的GCD(莫比乌斯反演) 题面 讨厌权限题!!!提供洛谷题面 题解 单次询问\(O(n)\)是做过的一模一样的题目 但是现在很显然不行了, 于是继续推 \[ans=\sum_{ ...

  3. 【BZOJ2818】Gcd(莫比乌斯反演)

    [BZOJ2818]Gcd(莫比乌斯反演) 题面 Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Ou ...

  4. 【HDU1695】GCD(莫比乌斯反演)

    [HDU1695]GCD(莫比乌斯反演) 题面 题目大意 求\(a<=x<=b,c<=y<=d\) 且\(gcd(x,y)=k\)的无序数对的个数 其中,你可以假定\(a=c= ...

  5. spoj 7001. Visible Lattice Points GCD问题 莫比乌斯反演

    SPOJ Problem Set (classical) 7001. Visible Lattice Points Problem code: VLATTICE Consider a N*N*N la ...

  6. 【HDU4947】GCD Array (莫比乌斯反演+树状数组)

    BUPT2017 wintertraining(15) #5H HDU- 4947 题意 有一个长度为l的数组,现在有m个操作,第1种为1 n d v,给下标x 满足gcd(x,n)=d的\(a_x\ ...

  7. 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 ...

  8. P2257 YY的GCD (莫比乌斯反演)

    [题目链接] https://www.luogu.org/problemnew/show/P2257 // luogu-judger-enable-o2 /* -------------------- ...

  9. 【洛谷2257】YY的GCD(莫比乌斯反演)

    点此看题面 大致题意: 求\(\sum_{x=1}^N\sum_{y=1}^MIsPrime(gcd(x,y))\). 莫比乌斯反演 听说此题是莫比乌斯反演入门题? 一些定义 首先,我们可以定义\(f ...

随机推荐

  1. Caused by: java.io.FileNotFoundException: velocity.log (No such file or directory)

    Caused by: org.apache.velocity.exception.VelocityException: Error initializing log: Failed to initia ...

  2. 单页应用 - Token 验证

    单页应用 - Token 验证 转:https://juejin.im/post/58da720b570c350058ecd40f 第一次接触单页应用,记录公司项目关于Token验证知识. Token ...

  3. vue源码分析—数据绑定

    放进沙里附件拉萨就发牢骚:剑飞:啊撒

  4. [BZOJ 2759] 一个动态树好题

    [BZOJ 2759] 一个动态树好题 题目描述 首先这是个基环树. 然后根节点一定会连出去一条非树边.通过一个环就可以解除根的答案,然后其他节点的答案就可以由根解出来. 因为要修改\(p_i\),所 ...

  5. 设计模式のIteratorPattern(迭代器模式)----行为模式

    一.产生背景 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 二.实现方式 ...

  6. Feature Extractor[Inception v4]

    0. 背景 随着何凯明等人提出的ResNet v1,google这边坐不住了,他们基于inception v3的基础上,引入了残差结构,提出了inception-resnet-v1和inception ...

  7. RabbitMQ详解(一)------简介与安装

    RabbitMQ 这个消息中间件,其实公司最近的项目中有用到,但是一直没有系统的整理,最近看完了<RabbitMQ实战  高效部署分布式消息队列>这本书,所以顺便写写. 那么关于 Rabb ...

  8. java 基础04 重写

  9. 【转】AlphaGO Zero 原理

      原文地址:https://www.hhyz.me/2018/08/08/2018-08-08-AlphaGO-Zero/> 1. 概述 简单来说,AlphaGo Zero 的训练可以分为三个 ...

  10. ASP.NET Core 与支付宝开发文档

    一.目录 ASP.NET Core 2.0 使用支付宝PC网站支付 ASP.NET Core 2.0 支付宝当面付之扫码支付 常见使用问题解答 已有多个公司数个项目用本组件并上线,稳定使用. 二.项目 ...