前言

考场上没想出来,收到来自题目标题的嘲讽

题目大意

求 ∑ i = 1 n i ! i k ( m o d 998244353 ) \sum\limits_{i=1}^n\frac{i!}{i^k}\left(\mod 998244353\right) i=1∑n​iki!​(mod998244353) ,其中 n ( 1 ≤ 2 × 1 0 7 ) , k ( 1 ≤ k ≤ 2 × 1 0 7 ) n(1\le 2\times10^7),k(1\le k\le 2\times 10^7) n(1≤2×107),k(1≤k≤2×107) 为输入给出。

解题思路

对于暴力思路,直接爆算即可,时间复杂度为 O ( ( log ⁡ 2 k + log ⁡ 2 998244353 ) × n ) O\left(\left(\log_2k+\log_2998244353\right)\times n\right) O((log2​k+log2​998244353)×n) 大常数 O ( n ) O(n) O(n) 但常数太大,过不去。
考虑优化——预处理。我们可以预处理出 1 ∼ n 1\sim n 1∼n 范围内所有数的 k k k 次方在 m o d 998244353 \mod 998244353 mod998244353 意义下的逆元,进一步思考,由于 a = b × c a=b\times c a=b×c 则 a − 1 = b − 1 × c − 1 a^{-1}=b^{-1}\times c^{-1} a−1=b−1×c−1,可以使用欧拉筛进行处理。具体地说,就算对于每个质数,可以直接计算其 k k k 次方的逆元:

for(int i=2;i<=n;i++){if(!a[i]){ans[++tot]=i;a[i]=_pow(_pow(i,m),Mod-2);//此处}for(int j=1;j<=tot&&ans[j]*i<=n;j++){a[ans[j]*i]=a[ans[j]]*a[i]%Mod;if(i%ans[j]==0)break;}}

而对于合数,则将其拆成两个数相乘,借此得到其逆元:

for(int i=2;i<=n;i++){if(!a[i]){ans[++tot]=i;a[i]=_pow(_pow(i,m),Mod-2);}for(int j=1;j<=tot&&ans[j]*i<=n;j++){a[ans[j]*i]=a[ans[j]]*a[i]%Mod;//此处if(i%ans[j]==0)break;}}

代码实现

#include<bits/stdc++.h>
using namespace std;
const long long Mod=998244353;
long long n,m,tot,a[20000010],output,now=1;
int ans[5000010];
long long _pow(long long d,long long z)
{long long ans=1;while(z){if(z&1)ans=ans*d%Mod;d=d*d%Mod;z>>=1;}return ans;
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);freopen("math.in","r",stdin);freopen("math.out","w",stdout);cin>>n>>m;a[1]=1;for(int i=2;i<=n;i++){if(!a[i]){ans[++tot]=i;a[i]=_pow(_pow(i,m),Mod-2);}for(int j=1;j<=tot&&ans[j]*i<=n;j++){a[ans[j]*i]=a[ans[j]]*a[i]%Mod;if(i%ans[j]==0)break;}}for(int i=1;i<=n;i++){//      cout<<a[i]<<"\n";now=now*i%Mod;output=(output+now*a[i])%Mod;}cout<<output;return 0;
}

GDKOI2023 D1T1相关推荐

  1. 神奇的幻方2015提高组d1t1

    题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,--,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...

  2. GDKOI2023 D2T1

    前言 相比于D1T1,这题才是真正的签到题,然而,我却爆0了.为了纪念这悲壮的0分,写下了这篇题解. 题目大意 给出 n ( 1 ≤ n ≤ 1 0 5 ) n(1\le n\le 10^5) n(1 ...

  3. GDKOI-2023 游记

    GDKOI-2023 游记 文章目录 GDKOI-2023 游记 1 扯淡 2 成绩单 3 行程 3.1 D a y 0 Day0 Day0 3.2 D a y 1 Day1 Day1 3.3 D a ...

  4. 洛谷 P2615 [NOIP2015 D1T1] 神奇的幻方

    题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,--,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. ...

  5. 【三分+枚举】LNOI2017 d1t1 期末考试

    题目描述: 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天或之前得知所有课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最 ...

  6. UOJ 405(IOI2018 D1T1)

    交互题 有一个长为$N$的由$A,B,X,Y$组成的字符串$S$,其中首字母不会重复出现.给定$N$,求$S$,可以询问一个字符串的最长的为$S$前缀的子串长度,询问次数不超过$N+2$即为满分,询问 ...

  7. sd省队集训d1t1

    还在学splay 就用splay a了一个题.. 全场rank5.. 码: #include<iostream> #include<cstdio> #include<ma ...

  8. 2017提高组D1T1 洛谷P3951 小凯的疑惑

    洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...

  9. 清北学堂模拟赛d1t1 位运算1(bit)

    题目描述 LYK拥有一个十进制的数N.它赋予了N一个新的意义:将N每一位都拆开来后再加起来就是N所拥有的价值.例如数字123拥有6的价值,数字999拥有27的价值. 假设数字N的价值是K,LYK想找到 ...

最新文章

  1. 计算机设计大赛颁奖典礼主持稿的串词,比赛颁奖典礼主持词
  2. java json数据输出,java服务器端输出JSON格式数据
  3. java panel 显示文字,从动态添加的jPanel获取文本
  4. angular分页插件tm.pagination
  5. 八十七、CSS水平垂直居中的布局方式
  6. 计算机常用工具软件教案,常用工具软件教案.doc
  7. 计算机二级java邓伦单_2010年3月计算机等级考试二级Java笔试试题(文字版)
  8. aplay 源码分析
  9. 做跨境如何去降低成本?
  10. 网络工程师考试常用计算公式汇总
  11. mysql查询自然周_Hive和MySQL中自然周保持一致的方法
  12. 计算机桌面文件删除不掉是怎么了,小马教你桌面上文件夹删不掉 【设置方法】 的办法_...
  13. maven日记(一):Maven使用入门
  14. 数学三次危机(三)“希帕索斯悖论”或“毕达哥拉斯悖论”
  15. 猴子吃桃问题之暴力解法
  16. 展望 2017年商业智能BI发展的趋势分析
  17. papers-06-07
  18. JBoss EAP 7消息系统
  19. DDR2/3进阶实验测试篇
  20. 海尔互联网转型成功了吗?

热门文章

  1. 西安自助游全攻略~~~~~很全的哦~~
  2. 谷歌浏览器(Google chrome)屏蔽搜索时出现广告的情况(代码版)
  3. C语言实现链表的基本操作(超详细注释)
  4. 起床困难综合症 NOI2014
  5. H3C WA4320H-CAN刷FAT肥模式
  6. 初学ROS(VMware Ubuntu18.04)问题解决篇(一)
  7. 拼在北上广的单身青年是怎样一种神奇的存在?
  8. unsqueeze,squeeze
  9. 小明要吃冰淇淋之RxJava:lift原理
  10. 微信小程序同步方法,方法内顺序从上至下依次执行