F - 小清新数论

做法一:欧拉函数

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int  maxn = 1e7+9;
const LL mod = 998244353;
LL phi[maxn],miu[maxn],fac[maxn];//phi--欧拉函数表  miu--莫比乌斯函数表  fac--i最大的素因子辅助打phi表
void init()
{for (int i = 1; i < maxn; ++i) fac[i] = i;phi[1] = miu[1] = 1;for (int i = 2; i < maxn; ++i){if (fac[i] == i)for (int j = i << 1; j < maxn; j += i)fac[j] = i;if (i / fac[i] % fac[i]) phi[i] = (fac[i] - 1)*phi[i / fac[i]], miu[i] = -miu[i / fac[i]]; //如果b质数  a%b!=0  phi(a*b) = phi(a)*b - phi(a)else phi[i] = fac[i] * phi[i / fac[i]], miu[i] = 0;                                       //当b是质数,a%b==0,phi(a*b)=phi(a)*b}for(int i=1;i<maxn;i++)phi[i]=phi[i]+phi[i-1];
}
int main(){init();LL n;cin>>n;LL NN=n;LL ans=0;for(LL i=1;i<=NN;i++){LL res=(phi[NN/i]*(LL)2-1)%mod;ans=(ans+miu[i]*res%mod)%mod;while(ans<0)ans+=mod;}printf("%lld\n",ans);
}

做法二:莫比乌斯反演

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
const int maxn=1e7+1;
ll phi[maxn],miu[maxn],vis[maxn];
void init(){for(int i=1;i<maxn;++i)vis[i]=i;phi[1]=miu[1]=1;for(int i=2;i<maxn;i++){if(vis[i]==i){for(int j=i<<1;j<maxn;j+=i)vis[j]=i;}if(i/vis[i]%vis[i])miu[i]= -miu[i/vis[i]];else miu[i]=0;}for(int i=1;i<maxn;i++)miu[i]=miu[i]+miu[i-1];
}
ll solve(int n,int m){ll ans=0;int N=min(n,m),r;for(int l =1;l<=N;l=r+1){r=min(n/(n/l),m/(m/l)); //取分块小的数ll res=(miu[r]-miu[l-1]+mod)%mod*(n/l)%mod*(n/l)%mod;   //miu[r]-miu[l-1]表示l~r区间miu和,ans=(ans+res+mod)%mod;}return ans;
}
int main(){init();int n,r;scanf("%d",&n);ll ans=0,res;for(int l=1;l<=n;l=r+1){r=n/(n/l);res=(miu[r]-miu[l-1]+mod)%mod*solve(n/l,n/l)%mod;ans=(ans+res+mod)%mod;}printf("%lld\n",ans);return 0;
}

做法三:杜教筛能过div1,跑了1423ms,对做法一中欧拉函数前n项和,欧拉函数前n项和进行杜教筛,然后套一个分块求解

#include<stdio.h>
#include<bits/stdc++.h>
#include<tr1/unordered_map>
#define INV2 499122177
using namespace std;
typedef long long ll;
const int N=1e7+20;
const int mod=998244353;
bool vis[N];
int mu[N],sum1[N];
long long phi[N],sum2[N];
int cnt,prim[N];
int e,e1;
tr1::unordered_map<long long,long long>w,w1;  //哈希 w用来求phi前缀和  w1用来求miu前缀和
void get(int maxn)
{phi[1]=mu[1]=1;for(int i=2;i<=maxn;i++){if(!vis[i]){prim[++cnt]=i;mu[i]=-1;phi[i]=i-1;}for(int j=1;j<=cnt&&prim[j]*i<=maxn;j++){vis[i*prim[j]]=1;if(i%prim[j]==0){phi[i*prim[j]]=phi[i]*prim[j];break;}else mu[i*prim[j]]=-mu[i],phi[i*prim[j]]=phi[i]*(prim[j]-1);}}for(int i=1;i<=maxn;i++)sum1[i]=sum1[i-1]+mu[i],sum2[i]=(sum2[i-1]+phi[i])%mod;   //打一个maxn的phi前缀和表 和miu前缀和表
}
int djsmu(long long x)  //  求miu前缀和
{if(x<=10000000)return sum1[x];if(w[x])return w[x];int ans=1;for(long long l=2,r;l<=x;l=r+1){r=x/(x/l);ans-=(r-l+1ll)*djsmu(x/l);}return w[x]=ans;
}
long long djsphi(long long x)   //求phi 前缀和
{if(x<=10000000)return sum2[x];if(w1[x])return w1[x];long long ans=x%mod*(x+1)%mod*INV2%mod;for(long long l=2,r;l<=x;l=r+1){r=x/(x/l);ans=(ans-(r-l+1)%mod*djsphi(x/l)+mod)%mod;}while(ans<0)ans+=mod;return w1[x]=ans%mod;
}
int main(){get(10000000);ll n,r;scanf("%lld",&n);ll ans=0,res;for(ll l=1;l<=n;l=r+1){r=n/(n/l);res=(ll)(djsmu(r)-djsmu(l-1)+mod)%mod*((djsphi(n/l)%mod*(ll)2%mod-1+mod)%mod)%mod;ans=(ans+res+mod)%mod;}printf("%lld\n",ans);return 0;
}

CCPC-Wannafly Winter Camp Day3 (Div2, onsite) F 小清新数论 欧拉函数的利用 莫比乌斯反演 杜教筛相关推荐

  1. CCPC-Wannafly Winter Camp Day3 (Div2, onsite) I 石头剪刀布(按秩合并并查集)

    题解:每次有两个事件: y y去挑战xx,如果赢了可以坐在x x的位置,打平或者输了就要被淘汰. 询问在进行所有一类事件后,有多少种情况可以让x x现在还没有被淘汰. 对于第二类事件,我们假设x x挑 ...

  2. 2020 CCPC Wannafly Winter Camp Day3 部分题解(ACEFG)

    查看题目 A 黑色气球 题意: n个气球,每个气球高度为正整数.给你每两个气球之间的高度和,还原出所有气球的高度,保证答案唯一. 解题思路: 签到题,因为高度的范围不大,直接枚举第一个气球的高度,检测 ...

  3. 2019 CCPC-Wannafly Winter Camp Day8 (Div2, onsite) 补题记录

    一篇来自ACM入门者的补题记录 最近有点懒,想着还有最后一篇博客没完成,是我最大的补题动力. 不过终于在camp过去三个月的时候完成了所有的补题博客,有点欣慰,下一个目标应该是补一补一年前暑期训练的题 ...

  4. 2019 CCPC-Wannafly Winter Camp Day1 (Div2, onsite)(补题记录)

    一篇来自ACM入门者的补题记录 文章目录 A.机器人 B.吃豆豆 C.拆拆拆数 E.流流流动 F.爬爬爬山 I.起起落落 J.夺宝奇兵 A.机器人 题意:有两条平行线段A,B,长度从1~n,机器人一开 ...

  5. CCPC-Wannafly Winter Camp Day8 (Div2, onsite) A 题 Aqours (精巧的树形DP)

    题目链接: https://www.cometoj.com/contest/29/problem/A?problem_id=414 Aqours 题目描述 Aqours 正在 LoveLive! 决赛 ...

  6. CCPC-Wannafly Winter Camp Day8 (Div2, onsite) 补题

    A Aqours 题解: https://www.cnblogs.com/qieqiemin/p/11251645.html D:吉良吉影的奇妙计划 (暴力打表) 题目描述 吉良吉影是一个平凡的上班族 ...

  7. 2020 CCPC Wannafly Winter Camp Day2 Div.12——A 托米的字符串【构造、数学】

    题目传送门 题目描述 托米有一个字符串,他经常拿出来玩.这天在英语课上,他学习了元音字母 a , e , i , o , u {a,e,i,o,u} a,e,i,o,u 以及半元音 y {y} y . ...

  8. 阔力梯的树(2020 CCPC Wannafly Winter Camp Day2 Div.12 )dsu on tree

    题解: dsu on tree dsu on tree的基本步骤就不说了 看到这题询问结点的子树问题,而且询问时离线的,首先想到的dsu on tree的这个trick. 本题的难题就是如何维护结点所 ...

  9. CCPC-Wannafly Winter Camp Day8 (Div2, onsite)

    Replay Dup4: 厕所是个换换脑子的好地方? 要读题啊,不要别人不做,自己就跟着不做啊 X: 读题很重要啊!什么时候才能读对题 不演队友啊 D题看错题, 直到最后一小时才看懂 很多时候要看榜单 ...

最新文章

  1. 微型计算机48MHz辐射超,2012职称计算机考试题理论题库
  2. 移动机器人传感器---IMU
  3. form表单元素设置只读
  4. 关于TagHelper的那些事情——自定义TagHelper(内嵌TagHelper)
  5. error: ‘PRIO_PROCESS’ undeclared
  6. 06LaTeX学习系列之---TeXstudio的使用
  7. 客户服务器与p2p文件分发,P2P大文件分发技术 | 点量软件
  8. 八大排序算法—源代码(c语言)
  9. 笔记本输字母p出现仅计算机,电脑打不了字只有字母怎么办?最简单的解决方法...
  10. go浏览器java_GO浏览器JAVAWP版下载_GO浏览器JAVA2016最新版_GO浏览器JAVA1.2.2-华军软件园...
  11. 勒索软件频繁升级,了解常见勒索软件很有必要
  12. 中兴手机怎么与计算机连接网络连接不上,手机可以连接wifi电脑连接不上怎么办?...
  13. Ubuntu18.04安装搜狗拼音输入法皮肤透明解决方法
  14. KindEditor 详细介绍
  15. 使用PowerShell下载必应图片
  16. 用python计算正多边形面积_Python怎么编写计算多边形面积的代码。?
  17. 上海踩踏事件所想,莫把应急预案当摆设
  18. 叙述计算机的主要应用领域并各举实例说明,《大学计算机基础》习题集.DOC
  19. 金丰机电参观学习有感
  20. 大规模微服务利器:eBPF 与 Kubernetes

热门文章

  1. 转行运维工程师之后,我先把这几个Linux 命令记在了本子上,实干9场景
  2. 计算机三级网络技术最全知识点总结【3】
  3. captivate 学习
  4. 魅族pro5 刷机 android,魅族Pro5线刷救砖ROM包_线刷救砖教程
  5. 【2.java面试-JVM篇】
  6. Ubuntu16.04+Cuda8.0+Caffe+ Opencv3.2+Matlab2015b的配置、安装与编译(三)
  7. 计算机动画_3dsmax的使用(四)
  8. 联想液晶显示器暴力拆解
  9. ctf xss利用_TCTF/0CTF2018 XSS Writeup
  10. 撤销前进快捷键_ps怎么撤销的三种方法和ps撤销快捷键以及连续撤销多步快捷键...