【51nod 1874】 奇怪的数学题
求
\]
首先这个次大公约数显然就是\(gcd\)除一下最小质因子了
于是
\]
显然可以枚举\(gcd\),之后利用欧拉函数来求和
\]
后面那个东西显然可以直接杜教筛了,但是我们想要整除分块的话就需要前面这个函数的前缀和
考虑到最小质因子是一个跟埃氏筛非常有关系的东西,所以我们得知这题的正解应该是min_25
考虑我们用min_25去筛一个函数叫\(f(i)=i^k\),我们只需要在min_25的过程中把每一个质数作为最小质因子的那些数的\(k\)次方和筛出来就好了
显然我们这样并没有计算\(d\)为质数的情况,于是我们顺便筛一个质数个数就好了
现在的问题变成了如何求自然数得幂次方和这样一个经典的问题,显然我们随便插个值就好了
但是就会发现模数不是质数,需要求逆元的方法就都凉了
有这样一个非常牛逼的做法是不需要逆元的,就是斯特林数
\]
不想推了,就抄yyb的吧
至于上面那个柿子为明明有分母却不需要逆元是因为\(n+1\)
的\(j+1\)次下降幂一定会有一个数是\(j+1\)的倍数,只要我们乘这个数得时候乘上这个数除以\(j+1\)的商就好了
代码
#include<cmath>
#include<cstdio>
#define re register
#define uint unsigned int
const int maxn=1e5+5;
int n,k,U,Sqr,o,m;
uint phi[1500005],g[maxn],S[2][55],s[maxn],pre[maxn],sum[maxn],h[maxn];
int f[1500005],p[500005],w[maxn],id1[maxn],id2[maxn];
inline int chk(int x) {return x<=Sqr?id1[x]:id2[n/x];}
inline uint ksm(uint a,int b) {
uint S=1;
while(b) {if(b&1) S*=a;b>>=1;a*=a;}
return S;
}
uint Sphi(int x) {
if(x<=U) return phi[x];
if(sum[n/x]) return sum[n/x];
uint now=1ll*x*(x+1)/2ll;
for(re int l=2,r;l<=x;l=r+1) {
r=x/(x/l);
now-=Sphi(x/l)*(r-l+1);
}
return sum[n/x]=now;
}
inline uint calc(int n) {
uint cnt=0;
for(re int i=1;i<=k;i++) {
uint ans=1;
int flag=0;
for(re int t=i+1,j=n+1;t;--j,--t)
if(!flag&&j%(i+1)==0) flag=1,ans*=(j/(i+1));else ans*=j;
cnt+=S[o][i]*ans;
}
return cnt;
}
int main() {
scanf("%d%d",&n,&k);U=std::pow(n,0.666)+1;Sqr=std::sqrt(n)+1;
f[1]=1,phi[1]=1;o=0;S[0][1]=1;
for(re int i=2;i<=U;i++) {
if(!f[i]) p[++p[0]]=i,phi[i]=i-1,pre[p[0]]=pre[p[0]-1]+ksm(i,k);
for(re int j=1;j<=p[0]&&p[j]*i<=U;j++) {
f[p[j]*i]=1;
if(i%p[j]==0) {phi[p[j]*i]=p[j]*phi[i];break;}
phi[p[j]*i]=(p[j]-1)*phi[i];
}
}
for(re int i=2;i<=k;i++,o^=1)
for(re int j=1;j<=i;j++)
S[o^1][j]=S[o][j-1]+S[o][j]*(uint)j;
for(re int i=1;i<=U;i++) phi[i]+=phi[i-1];
for(re int l=1,r;l<=n;l=r+1) {
r=n/(n/l);w[++m]=n/l;
if(w[m]<=Sqr) id1[w[m]]=m;else id2[n/w[m]]=m;
g[m]=calc(w[m])-1;h[m]=w[m]-1;
}
for(re int j=1;j<=p[0]&&1ll*p[j]*p[j]<=n;j++) {
uint tmp=ksm(p[j],k);
for(re int i=1;i<=m&&1ll*p[j]*p[j]<=w[i];i++) {
int t=chk(w[i]/p[j]);
uint tot=tmp*(g[t]-pre[j-1]);
s[i]+=g[t]-pre[j-1];g[i]-=tot;
h[i]-=(h[t]-j+1);
}
}
for(re int i=1;i<=m;i++) s[i]+=h[i];
uint ans=0;
for(re int l=1,r;l<=n;l=r+1) {
r=n/(n/l);
ans+=(2ll*Sphi(n/l)-1)*(s[chk(r)]-s[chk(l-1)]);
}
printf("%u\n",ans);
return 0;
}
【51nod 1874】 奇怪的数学题的更多相关文章
- [51nod 1847]奇怪的数学题
[ 51nod 1847 ]奇怪的数学题 题目 点这里看题目. 分析 是挺奇怪的...... 以下定义质数集合为\(P\),\(p_i\)为第\(i\)个质数. 定义\(mp(x)\) ...
- 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)
[51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...
- 【51nod 1847】奇怪的数学题
题目描述 给出 N,K ,请计算下面这个式子: \(∑_{i=1}^N∑_{j=1}^Nsgcd(i,j)^k\) 其中,sgcd(i, j)表示(i, j)的所有公约数中第二大的,特殊地,如果gcd ...
- 51nod 1965 奇怪的式子——min_25筛
题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1965 考虑 \( \prod_{i=1}^{n}\sigma_0^i \) \ ...
- [51nod1847]奇怪的数学题
description 51nod 求\[\sum_{i=1}^{n}\sum_{j=1}^{n}sgcd(i,j)^k\]其中\(sgcd(i,j)\)表示\(i,j\)的次大公约数,如果\(gcd ...
- 51nod 1965 奇怪的式子 —— min_25筛
题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1965 推式子就同这里:https://www.cnblogs.com/yoyo ...
- 51nod 1874 字符串排序
1874 字符串排序 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 定义一个字符串的无序度为所有位置后面的字母比该位置的字母小的总数之和.比如&q ...
- 【51NOD1847】奇怪的数学题 min_25筛
题目描述 记\(sgcd(i,j)\)为\(i,j\)的次大公约数. 给你\(n\),求 \[ \sum_{i=1}^n\sum_{j=1}^n{sgcd(i,j)}^k \] 对\(2^{32}\) ...
- 【51nod1847】 奇怪的数学题
就当我是 A 了此题吧... 首先预备知识有点多(因为题目要处理的东西都挺毒瘤): 杜教筛运用(当然你可以用其他筛?) 第二类斯特林数相关定理 下降阶乘幂相关定理 min25 筛运用 好了可以关掉本题 ...
随机推荐
- Git查看历史记录的几种方法
- 基于Mina的Http Server以及简单的Http请求客户端
目的: Java平台下的内部组件之间的通信. 1.WebService 由于感觉本身Java平台下的Web Service标准就不够统一,相互之间的调用就会有一些问题,更不用说与.net等 ...
- redis 体系结构
程序strings key-value 类型 ,value不仅是String,也可以是数字.使用strings 类型可以完全实现目前 Memcache 的功能,并且效率更高,还可以享受redis的 ...
- K8S之WebApi部署
转载声明 本文转自:ASP.NET Core on K8S学习初探(3)部署API到K8S 1.下载镜像 docker pull edisonsaonian/k8s-demo 因为是测试流程,直接把文 ...
- 【模板篇】k短路 SDOI2010 魔法猪学院
题目传送门 吐槽时间 题目分析 代码 题目の传送门 都成了一道模板题了OvO ============================================================= ...
- eclipse导出说明文档
选中项目--右键--Export--Java--Javadoc—Finish 1.为程序添加文档注释 2.选中项目--右键Export--Java--Javadoc--next, 3.next--在V ...
- Android开发 自定义View_白色圆型涟漪动画View
代码: import android.animation.ValueAnimator; import android.content.Context; import android.graphics. ...
- Android开发 retrofit下载与上传
前言 此博客只讲解retrofit下载与上传的使用,其实与其说是retrofit的下载与上传还不如说,依然是Okhttp的下载与上传.如果你需要了解retrofit入门请查看这篇博客(此博客不在详细讲 ...
- overload和override二者之间的区别
overload和override三者之间的区别 Overload是重载,是有相同的方法名,但参数类型或个数彼此不同Override是重写,是在子类与父类中,子类中的方法的方法名,参数个数.类型都与父 ...
- Spring MVC(十五)--SpringMVC国际化配置项
Spring MVC中,当DispatcherServlet初始化的时候,会解析一个LocaleResolver接口的实现类,这个实现类就是用来解析国际化的. 一.国际化解析器 Spring MVC中 ...