Hillan and the girl —— 莫比乌斯对两个累加的优化

2024-04-07 01:18

本文主要是介绍Hillan and the girl —— 莫比乌斯对两个累加的优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem Description
“WTF! While everyone has his girl(gay) friend, I only have my keyboard!” Tired of watching others’ affair, Hillan burst into scream, which made him decide not to hold it back.
“All right, I am giving you a question. If you answer correctly, I will be your girl friend.” After listening to Hillan, Girl replied, “What is the value of ∑ni=1∑mj=1f(i,j), where f(i,j)=0 if gcd(i,j) is a square number and f(i,j)=1 if gcd(i,j) is not a square number(gcd(i,j) means the greatest common divisor of x and y)?”
But Hillan didn’t have enough Intelligence Quotient to give the right answer. So he turn to you for help.

Input
The first line contains an integer T(1≤T≤10,000)——The number of the test cases.
For each test case, the only line contains two integers n,m(1≤n,m≤10,000,000) with a white space separated.

Output
For each test case, the only line contains a integer that is the answer.

Sample Input
2
1 2333333
10 10

Sample Output
0
33

Hint

In the first test case, obviously f(i,j) f ( i , j ) always equals to 0, because i i always equals to 1 and gcd(i,j) is always a square number(always equals to 1).

这个有两个玩意,所以它构造出来就是
sqrt(k)=1nf(k)= ∑ s q r t ( k ) = 1 n f ( k ) = k|pg(p)(p<=N) ∑ k | p g ( p ) ( p <= N )
然后用莫比乌斯反演就可以得出我们要求的是
k=1sqrt(n) ∑ k = 1 s q r t ( n ) k|pμ(p/k)f(p) ∑ k | p μ ( p / k ) ∗ f ( p )
而f(p)是在n,m中gcd=p的倍数所有数量,那么就等于
k=1sqrt(n) ∑ k = 1 s q r t ( n ) k|pμ(p/k)(n/p)(m/p) ∑ k | p μ ( p / k ) ∗ ( n / p ) ∗ ( m / p )
因为 μ(p/k) μ ( p / k ) 我们是可以预处理出来的,所以需要变换一下式子
p=1n(n/p)(m/p) ∑ p = 1 n ( n / p ) ∗ ( m / p ) k|pμ(p/k) ∑ k | p μ ( p / k )
n/p和m/p可以通过整数分块加速

#include<bits/stdc++.h>
using namespace std;
#define eps 1e-6
#define ll long long
int n,m;
const int maxn=1e7+5;
int nprime[maxn],prime[maxn],cnt,mu[maxn],sum[maxn];
void init()
{cnt=0;mu[1]=1;for(int i=2;i<maxn;i++){if(!nprime[i]){prime[++cnt]=i;mu[i]=-1;}for(int j=1;j<=cnt&&prime[j]*i<maxn;j++){nprime[prime[j]*i]=1;if(i%prime[j]==0){mu[i*prime[j]]=0;break;}mu[i*prime[j]]=-mu[i];}}for(int i=1;i<=sqrt(maxn)+eps;i++)for(int j=i*i;j<maxn;j+=i*i)sum[j]+=mu[j/i/i];for(int i=2;i<maxn;i++)sum[i]+=sum[i-1];
}
int main()
{int t;scanf("%d",&t);init();while(t--){scanf("%d%d",&n,&m);ll ans=0;int ne;if(n>m)swap(n,m);for(int i=1;i<=n;i=ne+1){int l=n/i,r=m/i;ne=min(n/l,m/r);ans+=(ll)(sum[ne]-sum[i-1])*l*r;}printf("%lld\n",(ll)n*m-ans);}return 0;
}

这篇关于Hillan and the girl —— 莫比乌斯对两个累加的优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881302

相关文章

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.

深入解析Java NIO在高并发场景下的性能优化实践指南

《深入解析JavaNIO在高并发场景下的性能优化实践指南》随着互联网业务不断演进,对高并发、低延时网络服务的需求日益增长,本文将深入解析JavaNIO在高并发场景下的性能优化方法,希望对大家有所帮助... 目录简介一、技术背景与应用场景二、核心原理深入分析2.1 Selector多路复用2.2 Buffer

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be