牛客 Wannafly挑战赛27 D 绿魔法师
\(\color{green}{solution}\)
分析下,在\(1e5+1\)内,一个数的约数个数最多为\(2^{6}\)个,所以我们可以考虑枚举约数
复杂度\(O(N^{2^{6 \times 2}})\),实际上远远不到
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
vector <int> g[maxn];
int _pow(int x, int n, int P) {
int ret = 1;
for ( ; n; n >>= 1, x = 1LL * x * x % P)
if( n & 1) ret = 1LL * ret * x % P;
return ret;
}
int val[maxn], ins[maxn];
inline void qry(int val, int opt) {
for ( register int i = 0; i < g[val].size(); ++ i) {
ins[g[val][i]] += opt;
}
}
int solve(int x, int K, int P) {
memset(ins, 0, sizeof(ins));
int ret = _pow(x, K, P);
for ( register int i = 0; i < g[x].size(); ++ i) {
if( val[g[x][i]]-ins[g[x][i]]) {
int opt = val[g[x][i]]-ins[g[x][i]];
(ret += 1LL * opt * _pow(g[x][i], K, P) % P) %= P;
qry(g[x][i], opt); //
}
}
for ( register int i = 0; i < g[x].size(); ++ i) {
val[g[x][i]] ++;
}
return ret;
}
int n, x, K, P;
int main() {
scanf("%d", &n);
for ( register int i = 1e5; i; -- i) {
for ( register int k = i; k <= 1e5; k += i) g[k].push_back(i);
}
for ( register int i = 1; i <= n; ++ i) {
scanf("%d%d%d", &x, &K, &P);
printf("%d\n", solve(x, K, P));
}
return 0;
}
牛客 Wannafly挑战赛27 D 绿魔法师的更多相关文章
- Wannafly挑战赛27 D绿魔法师
链接Wannafly挑战赛27 D绿魔法师 一个空的可重集合\(S\),\(n\)次操作,每次操作给出\(x,k,p\),要求支持下列操作: 1.在\(S\)中加入\(x\). 2.求\[\sum_{ ...
- Wannafly挑战赛27 C蓝魔法师
链接Wannafly挑战赛27 C蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于等于\(k\),\(n,k\leq 2*10^3\) 假设我们正在考虑\(i\)这个子树,那么 ...
- 牛客wannafly 挑战赛14 B 前缀查询(trie树上dfs序+线段树)
牛客wannafly 挑战赛14 B 前缀查询(trie树上dfs序+线段树) 链接:https://ac.nowcoder.com/acm/problem/15706 现在需要您来帮忙维护这个名册, ...
- 牛客~~wannafly挑战赛19~A 队列
链接:https://www.nowcoder.com/acm/contest/131/A来源:牛客网 题目描述 ZZT 创造了一个队列 Q.这个队列包含了 N 个元素,队列中的第 i 个元素用 Qi ...
- 牛客Wannafly挑战赛23 B.游戏
游戏 题目描述 小N和小O在玩游戏.他们面前放了n堆石子,第i堆石子一开始有ci颗石头.他们轮流从某堆石子中取石子,不能不取.最后无法操作的人就输了这个游戏.但他们觉得这样玩太无聊了,更新了一下规则. ...
- [牛客Wannafly挑战赛27D]绿魔法师
description newcoder 给你一个空的可重集合\(S\). \(n\)次操作,每次操作给出\(x\),\(k\),\(p\),执行以下操作: \(opt\ 1\):在S中加入x. \( ...
- 牛客 Wannafly 挑战赛26D 禁书目录 排列组合 概率期望
原文链接https://www.cnblogs.com/zhouzhendong/p/9781060.html 题目传送门 - NowCoder Wannafly 26D 题意 放一放这一题原先的题面 ...
- 牛客Wannafly挑战赛26E 蚂蚁开会(树链剖分+线段树)
传送门 题面描述 一颗n个节点的树,m次操作,有点权(该节点蚂蚁个数)和边权(相邻节点的距离). 三种操作: 操作1:1 i x将节点i的点权修改为x.(1 <= i <= n; 1 &l ...
- 牛客Wannafly挑战赛11E 白兔的刁难
传送门 如果大力推单位根反演就可以获得一个 \(k^2logn\) 的好方法 \[ans_{t}=\frac{1}{k}\sum_{i=0}^{k-1}(w_k^{-t})^i(w_k^i+1)^n\ ...
随机推荐
- RAW编程接口
LWIP移植好之后,就要使用它提供的API接口来编写程序.
- C primer 编程练习 (不断更新)
目前在看<C Primer>,以后会经常在这篇博客里更新课后的编程练习题 第二章:编程练习 2.1 #include <stdio.h> int main(void) { pr ...
- springboot启动正常,访问restController报404
原因:spring boot只会扫描启动类当前包和以下的包 比如以下: 主类:Application放在包com.springboot.main controller类放在包com.springboo ...
- 前端福利之改变placeholder颜色的方法(转)
之前拿到一个设计图,Placeholder是白色的,所以就查看了一下改变placeholder的方法: input::-webkit-input-placeholder { /* WebKit bro ...
- CodeForces 427B Prison Transfer (滑动窗口)
题意:给定 n, t, c 和 n 个数,问你在这 n 个数中有多少连续的 c 个数,并且这个 c 个数不大于 t. 析:很简单么,是滑动窗口,从第一个开始遍历,如果找到 c 个数,那么让区间前端点加 ...
- CodeForces 690D1 The Wall (easy) (判断连通块的数量)
题意:给定一个图,问你有几个连通块. 析:不用说了,最简单的DFS. 代码如下: #include <bits/stdc++.h> using namespace std; const i ...
- JS各种情况处理
1.获取URL及其参数 实例:URL:file:///C:/Program%20Files/nodejs/test/jumbTarget.html?a=1&&b=2&& ...
- Leaflet入门:添加点线面并导入GeoJSON数据|Tutorial of Leaflet: Adding Points, Lines, Polygons and Import GeoJSON File
Web GIS系列: 1.搭建简易Web GIS网站:使用GeoServer+PostgreSQL+PostGIS+OpenLayers3 2.使用GeoServer+QGIS发布WMTS服务 3.使 ...
- [Selenium With C#基础教程] Lesson-04 按钮
作者:Surpassme 来源:http://www.jianshu.com/p/83d7416c4b7d 声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢. Button通常有两 ...
- 探索式软件测试—Exploratory Software Testing
最近找到去年上半年看过一本关于测试方面书籍的总结笔记,一直放在我的个人U盘里,当时是用Xmind记录的,现在重新整理下分享给大家了! James A.Whittaker [美] 詹姆斯·惠特克(软件测 ...