牛客 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\ ...
随机推荐
- 粗略了解fill与fill_n
以前只知道数组赋值时用memset(): 而这几天却了解到了一个函数:fill(); 感觉以后会有用吧... std::fill template <class ForwardIterator, ...
- springMvc 核心配置
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- Lucene.Net(转)
出处:http://www.cnblogs.com/piziyimao/archive/2013/01/31/2887072.html 做过站内搜索的朋友应该对Lucene.Net不陌生,没做过的也许 ...
- webstorm最新破解方法
方法来自 Rover12421 大神. 1.从官网下载WebStorm2016.1安装. 2.下载 破解补丁 并解压,记住路径 3.编辑WebStorm安装目录下 bin 文件夹中的 WebStorm ...
- C# SendKeys用法
功能:将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样. 语法:SendKeys.Send(string keys);SendKeys.SendWait(string keys); 说明 ...
- Statement 接口的应用(存在sql语句的注入风险)
实现简单的登录功能 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impo ...
- XJOI 3578 排列交换/AtCoder beginner contest 097D equal (并查集)
题目描述: 你有一个1到N的排列P1,P2,P3...PN,还有M对数(x1,y1),(x2,y2),....,(xM,yM),现在你可以选取任意对数,每对数可以选取任意次,然后对选择的某对数(xi, ...
- 15、Semantic-UI之导航
15.1 面包屑导航 在Semantic-UI中有多种样式实现面包屑导航,类似 / > 等. 示例:定义定义基础面包屑导航 <div class="ui container& ...
- C++ springf()的用法(转)
转:http://blog.csdn.net/masikkk/article/details/5634886 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于sprin ...
- linux 用户和组
每个用户拥有一个UID,操作系统实际使用的是用户ID,而非用户名 每个用户属于一个主组,而且属于一个或多个附属组 每个组有一个GroupID 每个进程以一个用户身份运行,并受该用户可访问的资源限制 每 ...