链接:https://www.nowcoder.com/acm/contest/215/D
来源:牛客网

题目描述

“我不知道你在说什么,因为我只是个pupil。”--绿魔法师

一个空的可重集合S。
n次操作,每次操作给出x,k,p,执行以下操作:
1、在S中加入x。
2、输出

输入描述:

  1. 所有输入的数都是小于1e5+1的正整数。

输出描述:

  1. 输出对应的结果
示例1

输入

复制

  1. 3
  2. 4 1 9
  3. 5 2 8
  4. 6 3 7

输出

复制

  1. 4
  2. 2
  3. 1
  4.  
  5. 题意 每次增加一个数,求新增加的数同前面每个数的gcd k 次幂再对 p 取模,将答案累加
    思路分析
      考虑每次增加一个数时,需要找到同前面每个数字的 gcd 本质上的 gcd 就是当前数的约数中的某一个
      因此每插入一个新的元素时,就是相当于插入了当前这个数的所有的约数,从最大的约数开始插入,并且每次检索前面有此约数的数有多少个即可
      复杂度 n*w*w w 为这个数的约数个数,但实际在 w^2 枚举因数时的复杂度是不够 w^2
    代码示例
  1. #define ll long long
  2. const ll maxn = 1e5+5;
  3.  
  4. ll n;
  5. ll x, k, p;
  6. vector<ll>ve[maxn];
  7.  
  8. inline ll read() {
  9. ll x = 0, f = 1; register char ch = getchar();
  10. while (ch<'0' || ch>'9') { if (ch == '-')f = -1; ch = getchar(); }
  11. while (ch >= '0'&&ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }
  12. return x*f;
  13. }
  14.  
  15. inline void init() {
  16. for(ll i = 1; i <= 100000; i++){
  17. for(ll j = i; j <= 100000; j += i){
  18. ve[j].push_back(i);
  19. }
  20. }
  21.  
  22. }
  23.  
  24. inline ll qw(ll x, ll cnt){
  25. ll res = 1;
  26.  
  27. while(cnt){
  28. if (cnt&1) res *= x;
  29. res %= p;
  30. x *= x;
  31. x %= p;
  32. cnt >>= 1;
  33. }
  34. return res;
  35. }
  36.  
  37. ll cnt[maxn], del[maxn];
  38. ll pp[maxn], pt[maxn];
  39. inline void solve() {
  40. for(ll i = 0; i < ve[x].size(); i++) cnt[ve[x][i]]++;
  41. ll ans = 0;
  42. ll c = 0;
  43. for(ll i = ve[x].size()-1; i >= 0; i--){
  44. ll num = ve[x][i];
  45. if (cnt[num] <= del[num]) continue;
  46. ans += (cnt[num]-del[num])*qw(num, k)%p;
  47. ans %= p;
  48. for(ll j = 0; j < ve[num].size(); j++){
  49. ll f = ve[num][j];
  50. del[f] += (cnt[num]-del[num]);
  51. }
  52. }
  53. for(int i = 0; i < ve[x].size(); i++) del[ve[x][i]] = 0;
  54. printf("%lld\n", ans);
  55. }
  56.  
  57. int main() {
  58. init();
  59. cin >> n;
  60. for(ll i = 1; i <= n; i++){
  61. x = read(), k = read(), p = read();
  62. solve();
  63. }
  64. return 0;
  65. }
  1.  

wannafly 27 D 巧妙求取约数的更多相关文章

  1. java 求取某一段时间内的每一天、每一月、每一年

    1.求取某一段时间内的每一天 Date date0 = new SimpleDateFormat("yyyy-MM-dd").parse("2014-01-01" ...

  2. OpenCV 最小二乘拟合方法求取直线倾角

    工业相机拍摄的图像中,由于摄像质量的限制,图像中的直线经过处理后,会表现出比较严重的锯齿.在这种情况下求取直线的倾角(其实就是直线的斜率),如果是直接选取直线的开始点和结束点来计算,或是用opencv ...

  3. php自定义函数求取平方根

    <?phpfunction sqare($a, $left, $right){ $mid = ($left + $right)/2; if($mid * $mid == $a || (abs($ ...

  4. oracle 当前年到指定年的年度范围求取

    如下面公式所示,求取2015到当前年(2018)的年度范围,当前年是由系统获取的,用到了sysdate和函数to_char,to_date. 当然,当前年也可以换成指定年份 SELECT TO_CHA ...

  5. poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数

    poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数 题目大意:如题目所示 给你一些关系图——连通图,想要问你有没有个节点,损坏后,可以生成几个互相独立的网络(也就是连通分量), ...

  6. python 库 Numpy 中如何求取向量范数 np.linalg.norm(求范数)(向量的第二范数为传统意义上的向量长度),(如何求取向量的单位向量)

    求取向量二范数,并求取单位向量(行向量计算) import numpy as np x=np.array([[0, 3, 4], [2, 6, 4]]) y=np.linalg.norm(x, axi ...

  7. K:求取数组中最大连续子序列和的四个算法

    相关介绍:  求取数组中最大连续子序列和问题,是一个较为"古老"的一个问题.该问题的描述为,给定一个整型数组(当然浮点型也是可以的啦),求取其下标连续的子序列,且其和为该数组的所有 ...

  8. 使用C#版OpenCV进行圆心求取

    OpenCVSharp是OpenCV的.NET wrapper,是一名日本工程师开发的,项目地址为:https://github.com/shimat/opencvsharp. 该源码是 BSD开放协 ...

  9. 第3节 mapreduce高级:8、9、自定义分区实现分组求取top1

    自定义GroupingComparator求取topN GroupingComparator是mapreduce当中reduce端的一个功能组件,主要的作用是决定哪些数据作为一组,调用一次reduce ...

随机推荐

  1. linux如何查看nginx是否启动

    Nginx是一个高性能的反向代理服务器,现在一般作为我们网站或其他Web服务的第一层代理,用户在浏览器请求首先经过的就是Nginx服务. 如果Nginx服务没有启动或异常结束,将会影响Web服务的正常 ...

  2. Vue 语法的一些小问题

    设置 sty行内样式 :style="{width:mapWidth,height:mapHeight}" This指向   axios 使用axios 的时候 ,在生命周期函数  ...

  3. 基于@AspectJ注解配置切面与基于XML配置切面

    1. Waiter目标类 package com.smart.aop.advice.pointcut; public class Waiter { public void greetTo(String ...

  4. 符合阿里巴巴代码规范的checkstyle检测文件

    一.安装与简介 eclipse和idea都有对应的插件,找到插件安装界面.搜索checkstyle,点击安装后,重启IDE即可.(网上有很多安装教程,就不重复制造轮子了) 二.导入配置文件 在chec ...

  5. 【js】 vue 2.5.1 源码学习(六) initProxy initLifeCycle 渲染函数的作用域代理

    大体思路 (五) 1. initProxy 渲染函数的作用域代理 ==> es6 如果支持proxy (hasProxy) 就用proxy 不支持就用 defineProperty() prox ...

  6. H3C FTP配置示例

  7. Android4_学会使用Log打印

    一.Log介绍: Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我们打印日志. Log.v() .用于打印那些最为琐碎的.意义最小的日志信息. ...

  8. HDU 2068 RPG错排 [错排公式]

    1.题意:1到N的序列的排列中,元素位置与元素值相对应的情况(值为i的元素在某个排列中正好排在第i个位置)大于等于序列规模一半的情况,有多少个? 2.输入输出:每组数据一个数,N,规定输入以0结尾: ...

  9. 利用OGG进行数据库表的初始化

    OGG初始化 1.停止目标端re1进程 2.配置ei进程(若目标端有ei进程之前投递的文件则先清空) GGSCI (localhost) 1>add extract ei1, sourceist ...

  10. DRF框架中的异常处理程序

    目录 DRF框架中自定义异常处理 一.自定义异常的原因 二.如何设置处理异常的程序 DRF框架中自定义异常处理 一.自定义异常的原因 在Django和DRF框架中都封装了很多的处理异常的程序,可以处理 ...