链接Wannafly挑战赛27 D绿魔法师

  • 一个空的可重集合\(S\),\(n\)次操作,每次操作给出\(x,k,p\),要求支持下列操作:
  • 1、在\(S\)中加入\(x\)。
  • 2、求$$\sum_{y\in S}gcd(x,y)^k\ mod\ p$$
  • 所有输入的数不超过\(10^5\)。
  • 不是莫比乌斯啊。
  • 做法比较暴力,应该有更好的\(idea\)
  • 首先把\(1\)到\(n\)的每个数的所有因数筛出来,\(nlnn\)即可。
  • 然后考虑怎么算一个数的答案。
  • 首先\(gcd\)意味着最后算入答案的数一定是\(x\)的约数,那么对于加入一个数\(x\),我们把他所有的约数都加上1,对于询问元素\(x\),直接查他的约数的值即可。
  • 但是这样会算重复,原因是一个数的贡献会被算他和\(x\)的公共约数次,所以对于每个约数,再枚举他的约数容斥减去即可。
  • 复杂度\(O(n\sqrt n\ logn)\)???,感觉不太对。
#include<bits/stdc++.h>
#define R register int
#define ll long long
#define il inline
using namespace std;
const int N=100002;
int n,lim,x,k,mod,tp,S[N],hav[N],STK[N];
vector<int>G[N];
il int gi(){
ll x=0,k=1;char c=getchar();
while((c<'0'||c>'9')&&c!='-')c=getchar();
if(c=='-')k=-1,c=getchar();
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x*k;
}
il int Qpow(R x,R y){
R ans=1,bas=x;
while(y){
if(y&1)ans=1ll*ans*bas%mod;
bas=1ll*bas*bas%mod,y>>=1;
}return ans;
}
il void sol(){
R res=0;
x=gi(),k=gi(),mod=gi();
for(R i=0,lim=G[x].size();i<lim;++i)
S[G[x][i]]++;
for(R i=G[x].size()-1,v=G[x][i];i>=0;--i,v=G[x][i]){
if(!S[v])continue;
res=(res+1ll*S[v]*Qpow(v,k)%mod)%mod;
for(R j=G[v].size()-2;j>=0;--j){
S[G[v][j]]-=S[v];
if(!hav[G[v][j]])STK[++tp]=G[v][j];
hav[G[v][j]]+=S[v];
}
}
while(tp)S[STK[tp]]+=hav[STK[tp]],hav[STK[tp]]=0,tp--;
printf("%d\n",res);
}
int main(){
n=gi(),lim=1e5+1;
for(R i=1;i<=lim;++i)
for(R j=i;j<=lim;j+=i)
G[j].push_back(i);
while(n--)sol();
return 0;
}

Wannafly挑战赛27 D绿魔法师的更多相关文章

  1. 牛客 Wannafly挑战赛27 D 绿魔法师

    传送门 \(\color{green}{solution}\) 分析下,在\(1e5+1\)内,一个数的约数个数最多为\(2^{6}\)个,所以我们可以考虑枚举约数 复杂度\(O(N^{2^{6 \t ...

  2. Wannafly挑战赛27 C蓝魔法师

    链接Wannafly挑战赛27 C蓝魔法师 给出一棵树,求有多少种删边方案,使得删后的图每个连通块大小小于等于\(k\),\(n,k\leq 2*10^3\) 假设我们正在考虑\(i\)这个子树,那么 ...

  3. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  4. 牛客网 Wannafly挑战赛27 蓝魔法师

    蓝魔法师 链接: https://www.nowcoder.com/acm/contest/215/C 来源:牛客网 题目描述 "你,你认错人了.我真的,真的不是食人魔."--蓝魔 ...

  5. Wannafly挑战赛25游记

    Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...

  6. Wannafly 挑战赛 19 参考题解

    这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...

  7. Wannafly挑战赛21A

    题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...

  8. Wannafly挑战赛24游记

    Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...

  9. Wannafly挑战赛25C 期望操作数

    Wannafly挑战赛25C 期望操作数 简单题啦 \(f[i]=\frac{\sum_{j<=i}f[j]}{i}+1\) \(f[i]=\frac{f[i]}{i}+\frac{\sum_{ ...

随机推荐

  1. 对象转json串.

    public static Object returnObject(String jsonStr, Class objClass) {if (jsonStr == null) {return null ...

  2. 利用Javascript解决HTML大数据列表引起的网页加载慢/卡死问题。

    在一些网页应用中,有时会碰到一个超级巨大的列表,成千上万行,这时大部份浏览器解析起来就非常痛苦了(有可能直接卡死). 也许你们会说可以分页或动态加载啊?但是有可能需求不允许分页,动态加载?网络的延迟也 ...

  3. Sublime如何设置背景透明

    Sublime如何设置背景透明 下载sublime 透明背景插件 我用的是git下载插件: git clone https://github.com/vhanla/SublimeTextTrans.g ...

  4. 【洛谷P2239 螺旋矩阵】

    题目链接 直接看题 一看就很数学 我们不妨来画图 画出几个矩阵,找他们的关系 然后发现 当i==1时,对应的值就是j所对应的值: 当i==n时,所对应的值就是3*n-2-j+1: 当j==1时,所对应 ...

  5. fatal: repository 'xxxx' not found

    环境:centOS7  背景:公司代码仓库迁移,因而配置的jenkins自动打包git地址也要跟着变化. 问题描述:git clone http xxxx.git后报错: fatal: reposit ...

  6. sql时间类型相关

    1.现在时间 NOW() 示例: select * from users where date<now() 2.时间相减 INTERVAL ' DAY 示例: ' DAY 3.timestamp ...

  7. 函数介绍——MulDiv

    http://blog.sina.com.cn/s/blog_579ebc11010008ql.html 函数介绍——MulDiv (2007-03-27 10:05:30) 转载▼   分类: 编程 ...

  8. 《计算机程式设计》Week5 课堂笔记

    本笔记记录自 Coursera课程 <计算机程式设计> 台湾大学 刘邦锋老师 Week5 Pointer 5-1 Pointer Definition and Declaration 指针 ...

  9. Java程序控制结构

    分支结构 循环结构 跳转结构 一.分支结构 概念:程序从两条或多条路径中选择一条去执行,这种结构称为分支结构 1. if结构 特点: ① 条件表达式的形式可以为: boolean的变量 boolean ...

  10. 中标麒麟系统安装rpm文件

    打开终端,获得su权限. cd到rpm所在文件夹,输入指令,rpm -ivh rpm的名称