题目: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. UEditor学习笔记1

    首先对于前段时间遇到的一些总结做下记录: 0 == ''  => true transition,渐变属性,其值可以是某属性,也可以是all,如transition: all 0.3s:鼠标放到 ...

  2. 设计模式のFactoryPattern(工厂模式)----创建模式

    一.产生背景 设计一个连接服务器的框架,需要三个协议,"POP3"."IMAP"."HTTP",可以把这三个作为产品类,共同实现一个接口. ...

  3. public private protected default

    public private protected default 这几个限定访问控制符只是在编译阶段起作用,在运行阶段不起作用 private修饰符 , 本类可以访问 default修饰符 , 本类, ...

  4. Spring获取实现某接口的所有实例bean

    1.获取 applicationContext,通过ApplicationAware自动注入 2.getBeansOfType.getBeanNamesForType Map<String, I ...

  5. git pull request 流程

    git pull request 用于在 fork 官方 repo 到个人 github, 在本地修改后,向官方 repo 请求合并.在官方团队审查过代码后,就可以将自己所做的改动合并到官方 repo ...

  6. 深度学习之从RNN到LSTM

    1.循环神经网络概述 循环神经网络(RNN)和DNN,CNN不同,它能处理序列问题.常见的序列有:一段段连续的语音,一段段连续的手写文字,一条句子等等.这些序列长短不一,又比较难拆分成一个个独立的样本 ...

  7. 【angularJS】过滤器

    1.分类: <1>内置过滤器(见4) <2>自定义过滤器 2.作用:接收一个输入,通过某个规则进行处理,然后返回处理后的结果 3.应用: <1>在模板中使用 用法 ...

  8. (predicted == labels).sum().item()作用

    ⚠️(predicted == labels).sum().item()作用,举个小例子介绍: # -*- coding: utf-8 -*-import torch import numpy as ...

  9. docker 2 docker介绍

    docker是基于go语言实现的云开源项目 docker的主要目标是‘build ,ship and run any app,anywhere’,也就是说通过对应用程序组件的封装,分发,部署,运行等生 ...

  10. fastJson 之 JSONPath使用

    1. JSONPath介绍 官网地址: https://github.com/alibaba/fastjson/wiki/JSONPath fastjson 1.2.0之后的版本支持JSONPath. ...