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

题目描述

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

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

输入描述:

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

输出描述:

输出对应的结果
示例1

输入

复制

3
4 1 9
5 2 8
6 3 7

输出

复制

4
2
1 题意 : 每次增加一个数,求新增加的数同前面每个数的gcd 的 k 次幂再对 p 取模,将答案累加
思路分析 :
  考虑每次增加一个数时,需要找到同前面每个数字的 gcd, 本质上的 gcd 就是当前数的约数中的某一个
  因此每插入一个新的元素时,就是相当于插入了当前这个数的所有的约数,从最大的约数开始插入,并且每次检索前面有此约数的数有多少个即可
  复杂度 n*w*w ,w 为这个数的约数个数,但实际在 w^2 枚举因数时的复杂度是不够 w^2 的
代码示例 :
#define ll long long
const ll maxn = 1e5+5; ll n;
ll x, k, p;
vector<ll>ve[maxn]; inline ll read() {
ll x = 0, f = 1; register char ch = getchar();
while (ch<'0' || ch>'9') { if (ch == '-')f = -1; ch = getchar(); }
while (ch >= '0'&&ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }
return x*f;
} inline void init() {
for(ll i = 1; i <= 100000; i++){
for(ll j = i; j <= 100000; j += i){
ve[j].push_back(i);
}
} } inline ll qw(ll x, ll cnt){
ll res = 1; while(cnt){
if (cnt&1) res *= x;
res %= p;
x *= x;
x %= p;
cnt >>= 1;
}
return res;
} ll cnt[maxn], del[maxn];
ll pp[maxn], pt[maxn];
inline void solve() {
for(ll i = 0; i < ve[x].size(); i++) cnt[ve[x][i]]++;
ll ans = 0;
ll c = 0;
for(ll i = ve[x].size()-1; i >= 0; i--){
ll num = ve[x][i];
if (cnt[num] <= del[num]) continue;
ans += (cnt[num]-del[num])*qw(num, k)%p;
ans %= p;
for(ll j = 0; j < ve[num].size(); j++){
ll f = ve[num][j];
del[f] += (cnt[num]-del[num]);
}
}
for(int i = 0; i < ve[x].size(); i++) del[ve[x][i]] = 0;
printf("%lld\n", ans);
} int main() {
init();
cin >> n;
for(ll i = 1; i <= n; i++){
x = read(), k = read(), p = read();
solve();
}
return 0;
}

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. python基础四之列表

    列表详解 列表的增删改查! 增加 li = ['zxc', 'is', 'a'] # append 在列表结尾整体添加 修改列表,但是没有返回值 li.append('boy') print(li) ...

  2. 总结:关于留学网站使用laravel框架的总结

    1.从git库中clone后本地项目根目录没有vendor文件夹,安装composer 2.composer install 报错 ,删除 composer.lock 文件,重新执行 composer ...

  3. js执行代码顺序

    之前一直停留在主线程先执行,异步后执行的浅理解中,后来随着不断的学习,才渐渐意识到这里面还是有点复杂的,不过我不打算写很多.一幅图来说明这个复杂的关系 processTick可理解为node中的延时器 ...

  4. P1011 圆柱体的表面积

    题目描述 输入底面半径 \(r\) 和高 \(h\) ,输出圆柱体的表面积,保留 \(3\) 位小数. 输入格式 输入包含两个实数 \(r,h(1 \le r,h \le 1000)\) 且保证输入的 ...

  5. java编译器优化和运行期优化

    概述    最近在看jvm优化,总结一下学习的相关知识 (一)javac编译器 编译过程 1.解析与填充符号表过程 1).词法.语法分析    词法分析将源代码的字符流转变为标记集合,单个字符是程序编 ...

  6. H3C配置Trunk端口

  7. 读《Effect Java中文版》

    读<Effect Java中文版> 译者序 序 前言 第1章引言 1   第2章创建和销毁对象 4 第1条:考虑用静态工厂方法代替构造函数 4 第2条:使用私有构造函数强化singleto ...

  8. 深度解读 - Windows 7核心图形架构细致分析(来自微软)

    编辑:马志文 时间: 2009-12-29 如现在大家所想的那样, Windows7 其实是 Windows Vista 的改进版. Windows 7 在 Windows Vista 的基础上进行了 ...

  9. dWebpack编译速度优化实战

    当你的应用的规模还很小时,你可能不会在乎Webpack的编译速度,无论使用3.X还是4.X版本,它都足够快,或者说至少没让你等得不耐烦.但随着业务的增多,嗖嗖嗖一下项目就有上百个组件了,也是件很简单的 ...

  10. selenium元素和浏览器操作

    click和clear from selenium.webdriver.support.wait import WebDriverWait import time browser = webdrive ...