数学:莫比乌斯反演-约数个数和

本文深入探讨了BZOJ3994题目中利用莫比乌斯反演求解约数个数和的方法。通过将约束个数函数与gcd关联,进行复杂但精确的数学推导,展示了如何运用C++实现这一算法。代码中详细解释了预处理Mu函数、求解g[i]以及最终答案的计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BZOJ3994:利用莫比乌斯反演求约数个数和

解答此题需要利用约束个数函数的形式,将其与gcd联系再一起,然后再反演,推导

很麻烦

 1 #include<cstdio>
 2 #include<algorithm>
 3 using std::min;
 4 const int maxn=50005;
 5 int cnt;
 6 long long ans=0;
 7 bool vis[maxn];
 8 int mu[maxn],sum[maxn];
 9 long long prim[maxn],g[maxn];
10 inline long long read()
11 {
12     long long x=0,f=1;char ch=getchar();
13     while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
14     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
15     return x*f;
16 }
17 void get_mu(int n)
18 {
19     mu[1]=1;
20     for(int i=2;i<=n;i++)
21     {
22         if(!vis[i]){prim[++cnt]=i;mu[i]=-1;}
23         for(int j=1;j<=cnt&&prim[j]*i<=n;j++)
24         {
25             vis[prim[j]*i]=1;
26             if(i%prim[j]==0) break;
27             else mu[i*prim[j]]=-mu[i];
28         }
29     }
30     for(int i=1;i<=n;i++) sum[i]=sum[i-1]+mu[i];
31     for(int i=1;i<=n;i++)
32     {
33         for(int l=1,r;l<=i;l=r+1)
34         {
35             r=(i/(i/l));
36             g[i]+=(long long)(r-l+1)*(long long)(i/l);
37         }
38     }
39 }
40 int main()
41 {
42     int T,n,m,max_rep;
43     T=read();
44     get_mu(50000);
45     while(T--)
46     {
47         ans=0;
48         n=read();m=read();
49         max_rep=min(n,m);
50         for(int l=1,r;l<=max_rep;l=r+1)
51         {
52             r=min(n/(n/l),m/(m/l));
53             ans+=(sum[r]-sum[l-1])*(long long)g[n/l]*(long long)g[m/l];
54         }
55         printf("%lld\n",ans);
56     }
57     return 0;
58 }

 

转载于:https://www.cnblogs.com/aininot260/p/9702622.html

内容概要:本文深入探讨了Kotlin语言在函数式编程跨平台开发方面的特性优势,结合详细的代码案例,展示了Kotlin的核心技巧应用场景。文章首先介绍了高阶函数Lambda表达式的使用,解释了它们如何简化集合操作回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程跨平台开发领域不断完善发展。; 适合人群:对函数式编程跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解实践Kotlin的函数式编程特性跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解掌握。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值