来一个特别暴力的做法。

首先,如果删掉 \(x\) 和 \(y\) 的效果一定和删掉 \(xy\) 的效果相同,且代价一定不大于后者。

于是我们只删除质数,题目就变成了寻找 \(i!(1 \leq i \leq \max n)\) 中有多少个质数出现了奇数次。

给差分一下,变成求 \(i\) 的质因子分解。

有人可能会认为这里需要用到 PR,其实并不需要,因为所有的 \(i \leq \max n\),所以只需要记录下每一个 \(i\) 最小的质因子,然后直接跳即可。

复杂度的话,\(i\) 的质因子总数一定不超过 \(\log_2 i\)(最坏情况是存在一个 \(k\) 使得 \(i=2^k\)),所以复杂度是 \(O(n\log \log n+T)\) 的,且常数较小

加上 快读&快输&加减法优化&整数除法转实数乘法&预处理逆元 后最大点才 349ms,轻松通过。

ps:这题思维难度和代码难度都不高,评绿吧。。。

#include<cstdlib>
#include<cstdio>
#include<cctype>
const int M=5e6+5,mod=998244353;
int T,n,k,top,p[M],ans[M],pri[M],pos[M];bool vis[M];
double inv[M];
inline int read(){
int n=0;char s;
while(!isdigit(s=getchar()));
while(n=n*10+(s^48),isdigit(s=getchar()));
return n;
}
inline void write(int n){
char s[10];int top=0;
while(s[++top]=n%10^48,n/=10);
while(putchar(s[top]),--top);
}
inline int Add(const int&a,const int&b){
return a+b>=mod?a+b-mod:a+b;
}
inline int Del(const int&a,const int&b){
return b>a?a-b+mod:a-b;
}
inline int pow(int a,int b){
int ans=1;
for(;b;b>>=1,a=1ll*a*a%mod)if(b&1)ans=1ll*ans*a%mod;
return ans;
}
inline void sieve(const int&M){
register int i,j,x;
for(i=2;i<=M;++i){
ans[x=i]=ans[i-1];
if(!pos[i]){
pri[pos[i]=++top]=i;inv[top]=1./i+1e-15;
ans[i]=Add(ans[i],p[top]=pow(i,k));vis[top]=1;
}
else{
while(x^1){
ans[i]=(vis[pos[x]]^=1)?Add(ans[i],p[pos[x]]):Del(ans[i],p[pos[x]]);
x=x*inv[pos[x]];
}
}
for(j=1;(x=i*pri[j])<=M;++j)if((pos[x]=j)==pos[i])break;
}
}
signed main(){
register int i;
T=read();k=read();sieve(read());
while(T--)write(ans[read()]),putchar(10);
}

最新文章

  1. C#datagridview 防止闪烁的方法
  2. 从C#垃圾回收(GC)机制中挖掘性能优化方案
  3. mysql 怎么查询出,分组后的总条数。。。也就是有多少组数。。。。怎么写
  4. 获取URL参数
  5. 涵盖网站基本使用的正则表达式的验证方法.cs
  6. Ubuntu系统使用技巧
  7. ObjectiveC 文件操作二
  8. DateFormat 竟然是非线程安全的?!!!!!
  9. jsp窗口关闭的触发函数
  10. ES 17 - (底层原理) Elasticsearch增删改查索引数据的过程
  11. Android Studio工程项目打包成SDK(jar或aar格式)
  12. git push 时提示用户名或密码相关错误信息
  13. 【Mybatis】MyBatis之动态SQL(六)
  14. 【Linux基础】VI命令模式下大小写转换
  15. zabbix-2.4.5的安装配置与使用
  16. 简单易懂的程序语言入门小册子(3):基于文本替换的解释器,let表达式,布尔类型,if表达式
  17. windows server 2008 R2如何更换系统界面语言/中文换英文
  18. SqlServer 中的触发器
  19. logback的使用
  20. memcached简单介绍及在django中的使用

热门文章

  1. 开源项目(asyncHttpClient) get post 方式提交
  2. Nginx中的Location和Rewrite
  3. 对已有的docker容器增加新的端口映射
  4. 总结haproxy各调度算法的实现方式及其应用场景
  5. Spring中@Autowired 注解的注入规则
  6. Rock Pi开发笔记(二):入手Rock Pi 4B plus(基于瑞星微RK3399)板子并制作系统运行
  7. 用python的turtle作图(二)动画吃豆人
  8. Solution -「ARC 101D」「AT4353」Robots and Exits
  9. C#颠倒字符串
  10. Session是什么?它与Cookie有什么区别?