【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 筛运用 好了可以关掉本题 ...
随机推荐
- 将sparkStreaming结果保存到Redshift数据库
1.保存到redshift数据库的代码 package test05 import org.apache.log4j.{Level, Logger}import org.apache.spark.rd ...
- myeclipse问题
eclipse使用过程中发现汉字太小,几乎不可辨识. 更改办法:eclipse界面依次选择“window”–“preference”–“general”–“appearance”–“color and ...
- rem换算公式
当前rem基准值=预设的基准值/设计稿宽度*当前设备的宽度
- 数据库MySQL--修改数据表
创建数据库::create database 数据库名: 如果数据不存在则创建,存在不创建:Create database if not exists 数据库名 ; 删除数据库::drop datab ...
- Google Projectsheet Planning 插件的WBS
生成 WBS的序列號 在 Sldebar中的 "WBS" 按鈕: "< WBS" 取消下級目錄 "WBS >" 生成下級目錄 G ...
- [转]SpringMVC框架入门配置 IDEA下搭建Maven项目
初衷:本人初学SpringMVC的时候遇到各种稀奇古怪的问题,网上各种技术论坛上的帖子又参差不齐,难以一步到位达到配置好的效果,这里我将我配置的总结写到这里供大家初学SpringMVC的同僚们共同学习 ...
- Java Collection - ArrayList & LinkedList
总结 ref: https://blog.csdn.net/qq_32679815/article/details/78907437 1-ArrayList是实现了基于动态数组的数据结构,Linked ...
- java在使用equals的时候一种习惯帮忙隔离大部分空指针
相同的一段代码: 所以,在平时编码的时候,尽量把需要比对的不为空的放在equal前面,比如判断 i 是否等于 1,那么使用 1.equals(i) 更为合适,在equals源码中 传入的是object ...
- [ZJOI 2018]历史
题意:给定一棵树和点的\(Access\)次数,求切换链的最大值. 考虑修改时实边与虚边的贡献,用\(LCT\)维护此树. // luogu-judger-enable-o2 #include< ...
- c# 中xml序列化时相同节点存入不同类型值
先上需要序列话的类定义: [System.Xml.Serialization.XmlIncludeAttribute(typeof(DescriptionType))] [System.CodeDom ...