【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 筛运用 好了可以关掉本题 ...
随机推荐
- lds 文件说明
主要符号说明 OUTPUT_FORMAT(bfdname) 指定输出可执行文件格式. OUTPUT_ARCH(bfdname) 指定输出可执行文件所运行 CPU 平台 ENTRY(symbol) 指定 ...
- el-dialog(点击左上角的关闭x)执行弹窗关闭之前的回调
绑定的事件: :before-close="handleDialogClose" html: <!-- 新增.编辑弹窗 --> <el-dialog :close ...
- js拼接HTML onclick传参,,页面转义符
字符串 1 使用" .比如: ("'+key+'")例: htmlStr = htmlStr + '<span><img src="'+src ...
- 新建Application 报错android.app.Application cannot be cast
我在开发APP的时候重新使用了一个类,继承了android.app.Application.但是在运行的时候提示java.lang.ClassCastException: android.app.Ap ...
- Android开发 retrofit下载与上传
前言 此博客只讲解retrofit下载与上传的使用,其实与其说是retrofit的下载与上传还不如说,依然是Okhttp的下载与上传.如果你需要了解retrofit入门请查看这篇博客(此博客不在详细讲 ...
- layui中的tab切换
tab切换是常见的效果,为了方便经常使用插架中自带的,下面是layui中自带的tab切换效果, 主要代码如下: <!DOCTYPE html> <html lang="en ...
- 微信小程序为什么看不到所有的console.log()的日志信息
记录一个巨傻无比的问题 1.在首页的onLoad()函数里面,加了地理位置的加载,并打印到控制台上,可是今天就是没出现 2.然后纳闷的很久,各种google,发现没有人遇到这个问题 3.再然后,我就看 ...
- cocos2D-X LUA 非常简单的一个贪吃蛇案例
--[[ 贪吃蛇 ]] local RetroSnaker = class("RetroSnaker", function() return cc.Layer:create(); ...
- iOS UIWebView获取403/404
问题描述 与WindowsPhone不同,iOS UIWebView并不认为403/404这种情况下页面访问是失败的,这也情有可原,但有时候,我们需要对WebView所遇到的403/404进行处理. ...
- FP function programming
fp是函数式编程,也是一种编程方法,同面向对象的编程方法一样. 所谓的functional programming 就是函数式编程,这也是一种编程方法,或者说是编程模式,同面向过程的编程,以及面向对象 ...