这天,lyk又和gcd杠上了。 它拥有一个n个数的数列,它想实现两种操作。

1:将  a i  
 改为b。 2:给定一个数i,求所有 gcd(i,j)=1 
 时的  a j  
  的总和。

Input
第一行两个数n,Q(1<=n,Q<=100000)。
接下来一行n个数表示ai(1<=ai<=10^4)。
接下来Q行,每行先读入一个数A(1<=A<=2)。
若A=1,表示第一种操作,紧接着两个数i和b。(1<=i<=n,1<=b<=10^4)。
若B=2,表示第二种操作,紧接着一个数i。(1<=i<=n)。第一行两个数n,Q(1<=n,Q<=100000)。接下来一行n个数表示ai(1<=ai<=10^4)。接下来Q行,每行先读入一个数A(1<=A<=2)。若A=1,表示第一种操作,紧接着两个数i和b。(1<=i<=n,1<=b<=10^4)。若B=2,表示第二种操作,紧接着一个数i。(1<=i<=n)。
Output
对于每个询问输出一行表示答案。对于每个询问输出一行表示答案。
Input示例
5 3
1 2 3 4 5
2 4
1 3 1
2 45 31 2 3 4 52 41 3 12 4
Output示例
9
797

把每个数的贡献拆成每个质因数的贡献,然后查询时加加减减即可

#include <cstdio>
const int maxn = 100000 + 10;
bool mark[maxn] = {false};
int fr[maxn];
int pri[maxn], prn = 0;
void shai(){for(int i = 2; i < maxn; i++){if(!mark[i]){fr[i] = i;pri[++prn] = i;}for(int j = 1; j <= prn && i * pri[j] < maxn; j++){mark[i * pri[j]] = true;fr[i * pri[j]] = pri[j];if(i % pri[j] == 0) break;}}
}
int p[maxn], pcnt, Max;
inline void GetFactor(int n){pcnt = 0;int t;while(n != 1){t = fr[n];p[++pcnt] = t;while(n % t == 0) n /= t;}Max = (1 << pcnt) - 1;
}
int num[maxn], sum[maxn] = {0};
long long s = 0;
inline void Update(int x, int y){y -= num[x];num[x] += y;for(int i = 1; i * i <= x; i++)if(x % i == 0){if(i * i == x) sum[i] += y;else{sum[i] += y;sum[x / i] += y;}}s += y;
}
inline long long solve(int x){GetFactor(x);long long ret = 0;for(int M, scnt, i = 0; i <= Max; i++){M = 1;scnt = 0;for(int j = 1; j <= pcnt; j++)if(i & 1 << j - 1){scnt++;M *= p[j];}if(scnt & 1) ret -= sum[M];else ret += sum[M];}return ret;
}
int main(){shai();int n, Q;scanf("%d %d", &n, &Q);int t;for(int i = 1; i <= n; i++){scanf("%d", num + i);s += num[i];}for(int i = 1; i <= n; i++)for(int j = i; j <= n; j += i)sum[i] += num[j];int op, x, y;while(Q--){scanf("%d %d", &op, &x);if(op == 1){scanf("%d", &y);Update(x, y);}else printf("%lld\n", solve(x));}return 0;
}

转载于:https://www.cnblogs.com/ruoruoruo/p/7732455.html

[51nod1678]lyk与gcd问题相关推荐

  1. 51nod lyk与gcd

    1678 lyk与gcd 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 这天,lyk又和gcd杠上了. 它拥有一个n个数的数列,它想实现两种操作. 1:将  ai ...

  2. CF803C Maximal GCD

    洛谷 CF 分析 考虑从 \(k\) 个数的 \(gcd\) 入手. 设他们的 \(gcd\) 为 \(d\) .则有 \(d|n\) ,那么这 \(k\) 个数都除以 \(d\) 剩下的和即为 \( ...

  3. 数论(一)——素数,GCD,LCM

    这是一个数论系列:) 一.素数 ×费马小定理 Theorem: 设 p 是一个素数,a 是一个整数且不是 p 的倍数,那么 很遗憾,费马小定理的逆定理是不成立的.对 a = 2,满足的非素数 n 是存 ...

  4. [CQOI2014]数三角形 组合数 + 容斥 + gcd

    推导过程 : 组合数+容斥原理+gcd 正确做法是暴力的一种优化,ans=所有情况 - 平行坐标轴的三点共线 - 斜线三点共线 如果快速求斜线三点共线: 首先要知道一个结论,对于点(a,b) (x,y ...

  5. iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(下)

    2017-07-08 remember17 Cocoa开发者社区 7NSOperation的理解与使用 No.1:NSOperation简介 NSOperation是基于GCD之上的更高一层封装,NS ...

  6. iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)

    2017-07-08 remember17 Cocoa开发者社区 目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 ...

  7. GCD 容易让人迷惑的几个小问题

    来源:涂耀辉 链接:http://www.jianshu.com/p/ff444d664e51 写在开头: 本文旨在阐述一些大家容易产生迷惑的GCD相关内容,如果是需要了解一些GCD概念或者基础用法, ...

  8. hdu-3071 Gcd Lcm game---质因数分解+状态压缩+线段树

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3071 题目大意: 给定一个长度为n的序列m次操作,操作的种类一共有三种 查询 L :查询一个区间的所 ...

  9. 【Project Euler】530 GCD of Divisors 莫比乌斯反演

    [题目]GCD of Divisors [题意]给定f(n)=Σd|n gcd(d,n/d)的前缀和F(n),n=10^15. [算法]莫比乌斯反演 [题解]参考:任之洲数论函数.pdf 这个范围显然 ...

最新文章

  1. 关于学习Python的一点学习总结(16->popitem()->sedefault()->update()->values())
  2. 设计模式之UML类图
  3. lol最强最高输出的adc_LOL:官方公布ADC的输出能力,最强最弱都是谁?德莱文不是最高的...
  4. The package lists or status file could not be parsed or opened.
  5. 关于信贷资产逾期计算口径和小微模型的经典问题与答案
  6. 正则表达式去除括号的问题
  7. 应聘c语言面试试题,c语言面试最必考的十道试题,求职必看!!!
  8. ELM322 - OBD (VPW) to RS232 Interpreter (v2.0)
  9. fidder不拦截_利用Fiddler拦截接口请求并篡改数据
  10. 扬州工业机器人外壳设计排名_世界十大工业机器人制造商公布,排名第一的竟是……...
  11. python智能推荐系统教程_最新Python黑马头条推荐系统项目视频教程(精讲)
  12. 二手房“反价”越来越多 部分学区房涨价10万
  13. 女孩子录取了计算机类,苏州中学小女生录取藤校康奈尔工程计算机专业!看介绍,学攻略!...
  14. Python之qq自动发消息
  15. 《Neural Collaborative Filtering》NCF模型的理解以及python代码
  16. 终端怎么退出python命令行
  17. 二本计算机考研简单吗,普通二本考研很难吗 哪些大学不收二本考研
  18. 区块链开源实现hyperledger fabric架构详解
  19. [MobaXterm] Unable to detect graphics environment
  20. 如何提高项目组成员的会议纪要的记录能力?

热门文章

  1. SYMBDSNAP_SDK[3943]: Failed to open device: /dev/symbdsnapctl, errno: 2
  2. [CLR via C#]12. 泛型
  3. hive null 值比较大小
  4. python去噪算法
  5. ES6 - let、const与作用域
  6. XmlSerializer 对象序列化成XML 自定义编码格式(gb2312)
  7. Android 网络连接状态的监控
  8. AWS EC2 Run Command特性新增多重云脚本
  9. Java Web技术经验总结(二)
  10. servlet+jdbc+javabean其实跟ssh差不多