【BZOJ3309】DZY Loves Math

2023-11-09

3309: DZY Loves Math
Time Limit: 20 Sec Memory Limit: 512 MB
Submit: 411 Solved: 161
[Submit][Status][Discuss]
Description

对于正整数n,定义f(n)为n所含质因子的最大幂指数。例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0。
给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b)。

Input

第一行一个数T,表示询问数。
接下来T行,每行两个数a,b,表示一个询问。

Output

对于每一个询问,输出一行一个非负整数作为回答。

Sample Input
4

10000

7558588 9653114

6514903 4451211

7425644 1189442

6335198 4957

Sample Output
35793453939901

14225956593420

4332838845846

15400094813
HINT

【数据规模】

T 10000

1 a,b 10 7

Source
为了方便代入反演,我们把原题里那个f函数在这里用g代替
令f(i)为 gcd(x,y)=i,1xa,1yb 的数对数目。
然后有 f(i)=i|dμ(di)ndmd
对于每个询问,我们要求的答案就是

i=1min(m,n)g(i)f(i)=i=1min(m,n)g(i)i|dμ(di)ndmd

=d=1min(m,n)ndmdi|dμ(di)g(i)

当然就会想到对后面那个和式做前缀和,然后搭配枚举除法使用,把ProblemB里那个莫比乌斯函数的前缀和替换成这里这个和式的前缀和。
要怎么求?
当然我们要先排除掉那些 μ 为0的没有意义的项。
把d和i拆分成素数乘积的形式:
d=pa11pa22...pann

i=pA11pA22...pAnn

我们已经知道i是d的因子
那肯定就有对于i的每一个质因子 pi,Aiai
下面我们来代入线筛试试看怎么求后面的和式
在这里我进行了一些讨论
假设我们有两个数 iprime[j],i
①如果 imodprime[j]=0
这时候i和prime[j]就满足上面d和i的关系了。
这时候先来看一种极为特殊的情况: i=prime[j] ,显然这个时候和式的值为1
再说另一种特殊情况:如果d中每个质因子 pi 的指数 ai 都相等呢?这时候每个质因子都有可能对d的函数值 g(d) 有贡献,而满足这种情况也只可能是 i=pa11pa22...pai1i...pann 时(ai-1≠0)。那么这时候 ans[d]=ans[i]
为什么?
再加入这个新的p_i之后我们看一下那个和式的内容,增加了很多项对吧。这些项有一个共同点,数值的绝对值都一样,只是正负号不一样,而符号的决定就与质因子数目的奇偶有关了。这个稍微脑补一下就能发现是对的。。。(我怎么发现的?打表大法好!)
最后就是普遍情况了,完全是一堆没有规律的a摆在那里,满足里面必定存在ai≠aj,和式的值是多少?

0

什么你觉得我一直打表找规律是在扯淡?
那就证!
我们知道,所有a里有一部分是对 g(d) 有贡献的,另一部分是没有贡献的。
同样数值的正负号与质因子个数有关。
我们把d拆分成i和 di (不含平方因子,否则 μ 为0就没有意义了)两个因子,偶然发现让 di 有偶个质因子和奇个平方因子的方案数恰好是相同的,在这个条件下,每种方案总有数值为其相反数的方案与之对应。所以最后和式的值就成0了。
我怎么可能在做题时候自己证着玩呢233反正打表找到规律了先写出来代码A了再说,这些事都是做完题之后发生的。
第一种情况终于搞完了= =
imodprime[j]0
跟上面差不多了,不同的是如果i为互异素数组成, ans[iprime[j]]=ans[i] ,否则为0.
终于全部讨论完了= =
不知道我扯淡了这么多看这篇题解的人看懂了没有(说不定早就看烦了QAQ)如果还是不懂的话,请您翻别人的题解吧浪费您这么多时间真是抱歉QAQ网上好的题解一大堆呢。。。
直接愉悦的贴代码吧。。。
(这是一份曾经在BZOJ CE了9次还是10次最后AC的代码QUQ)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
using namespace std;
#define MAXN 10000010
int num[MAXN];
bool not_prime[MAXN];
int prime[MAXN],top;
int mu[MAXN],Last[MAXN];
long long sum[MAXN];
long long ans;
int T;
int a,b;
void in(int &x)
{
    char ch=' ';x=0;
    while (!(ch>='0'&&ch<='9')) ch=getchar();
    while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
}
void check_prime()
{
    for (int i=2;i<=MAXN-10;i++)
    {
        if (!not_prime[i])
            prime[++top]=i,mu[i]=-1,num[i]=1,sum[i]=1,Last[i]=i;
        for (int j=1;j<=top&&i*prime[j]<=MAXN-10;j++)
        {
            not_prime[i*prime[j]]=1;
            if (i%prime[j]==0)
            {
                mu[i*prime[j]]=0;
                num[i*prime[j]]=num[i]+1;
                Last[i*prime[j]]=Last[i]*prime[j];
                if (i/Last[i]==1) sum[i*prime[j]]=1;
                else 
                if (num[i/Last[i]]==num[i*prime[j]]) sum[i*prime[j]]=-sum[i/Last[i]];
                else sum[i*prime[j]]=0;
                break;
            }
            mu[i*prime[j]]=-mu[i];
            num[i*prime[j]]=1;
            Last[i*prime[j]]=prime[j];
            if (num[i]==1) sum[i*prime[j]]=-sum[i];
            else sum[i*prime[j]]=0;
        }
    }
}
long long get_num(int a,int b)
{
    long long last=0;
    long long ret=0;
    for (long long i=1;i<=min(a,b);i=last+1)
    {
        last=min(a/(a/i),b/(b/i));
        ret+=(long long)(a/i)*(b/i)*(sum[last]-sum[i-1]);
    }
    return ret;
}
int main()
{
    check_prime();
    num[0]=0;num[1]=0;num[2]=1;mu[0]=0;mu[1]=1;
    for (int i=1;i<=MAXN-10;i++) sum[i]+=sum[i-1];
    in(T);
    while (T--)
    {
        in(a);in(b);
        printf("%I64d\n",get_num(a,b));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【BZOJ3309】DZY Loves Math 的相关文章

  • 最大公约数和最小公倍数的关系

    联系 最大公约数 指两个或多个整数共有的约数中最大的那个 最小公倍数 指两个或多个整数共有的倍数中最小的那个 以两个整数为例 最大公约数表示为 a b 最小公倍数表示为 a b 定理 a b X a b ab a b均为整数 例题 incl
  • 中国剩余定理(孙子定理)

    看了很多博客始终没弄明白中国剩余定理到底是怎么算出来的 看孙子的话完全是一脸懵逼啊 还好有这个博客大神的博客Orz 真的讲的特别清晰 点赞点赞 下面会用到的数学公式 如果a b c 那么如果x b c 2 此时x a 2 也就是说除数相等时
  • 【数论基础】—— 隔板法

    隔板法 问题 n n n 个相同的小球 放到 m m m个不同的盒子里 盒子不能为空的方案数 n
  • 【数论】矩阵快速幂,递推优化,模板

    目录 一 矩阵快速幂用于优化递推 二 矩阵快速幂的推导 一 矩阵快速幂用于优化递推 矩阵快速幂用于优化递推公式 例如 斐波那契的递推公式为 f 1 1 f 2 1 f n f n 1 f n 2 n gt 3 当我们想要求第1e8项时 直接
  • 蓝桥杯:试题 算法训练 星际交流 康托展开

    题目 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 人类终于登上了火星的土地并且见到了神秘的火星人 人类和火星人都无法理解对方的语言 但是我们的科学家发明了一种用数字交流的方法 这种交流方法是这样 的 首先 火星人把一个
  • 数论中的欧拉函数

    在数论中 对于一正整数 n n n 欧拉函数 n varphi n n 定义为
  • 【学习笔记】大指数的两种处理方法——欧拉降幂和数学模拟

    问题背景 描述 题目范围 我们可以看到 y 的数位最长达1e5 1 远远超过了任何一个数据类型的范围 那我们如何计算像这样的大指数呢 有两种解决方法 我们先学习第一种 算法 欧拉降幂 对于算法欧拉降幂 你需要知道的东西有 1 欧拉函数 2
  • 【CLYZ集训】马可波罗【按位】【博弈论】

    题目大意 有两个人 n n n堆石子 每个人轮流取 每次可以取1 x x x个 最后没得取的人输 两人都采取最优策略 问对于 x
  • 扩展欧几里得算法

    扩展欧几里得算法是啥 那就要先知道什么是欧几里得算法 欧几里得算法 扩展欧几里得算法是欧几里得算法的推广 利用欧几里得算法的思想和递归求得贝祖等式a x b y gcd a b 不定方程中的一组x和y的解 原理如下 设a gt b 当b 0
  • 【BZOJ3309】DZY Loves Math(莫比乌斯反演)

    题面 求 i 1a j 1bf gcd a b sum i 1 a sum j 1 bf gcd a b 其中 f x f x 表示 x x分解质因数之后 最高的幂次 题解 完全不会莫比乌斯反演了 先来推式子 d 1a i 1a d j 1
  • 蓝桥杯真题:质数拆分

    这里 若干两两不同的质数之和 这里其实很容易想到首先我们要求出2019内的所有质数 这个打个表就好了 其次两两不同 我们应该要想到动态规划 这里设dp i j 表示前i个质数 可以两两不同加起来等于j的方案数 如果当前j gt prime
  • 过河 【状态压缩DP】+【完整的数论推导过程】

    题目链接 题意 很多人以为青蛙是要跳到石头上 一个个往后跳 问最少需要的石头数量 其实不然 题目给的样例的确也是有些坑了 青蛙每次都有跳的距离范围 题目求的是最少会跳到的石头 青蛙可以在水中起跳 它要尽可能的避开石头 也就是问抵达终点时最少
  • 机器人走方格 V2【数论】【组合】【费马小定理】

    M N的方格 一个机器人从左上走到右下 只能向右或向下走 有多少种不同的走法 由于方法数量可能很大 只需要输出Mod 10 9 7的结果 Input 第1行 2个数M N 中间用空格隔开 2 lt m n lt 1000000 Output
  • 牛客 · 奇♂妙拆分

    奇 妙拆分 题目描述 在遥远的米 奇 妙 妙 屋里住着一群自然数 他们没事就喜欢拆 开自己来探 究 现在他们想知道自己最多能被拆分成多少个不同的自然数 使得这些自然数相乘的值等于被拆分的数 输入描述 第 1 1 1行输入一个整数 T
  • 扩展欧几里得算法详解

    为了介绍扩展欧几里得 我们先介绍一下贝祖定理 即如果a b是整数 那么一定存在整数x y使得ax by gcd a b 换句话说 如果ax by m有解 那么m一定是gcd a b 的若干倍 可以来判断一个这样的式子有没有解 有一个直接的应
  • bzoj3309 DZY Loves Math

    题目链接 bzoj3309 题目大意 对于正整数n 定义f n 为n所含质因子的最大幂指数 给定正整数a b 求 ai 1 bj 1f gcd i j sum i 1 a sum j 1 b f gcd i j T lt 10000 1 l
  • 用OpenWrt软路由做旁路由-VMWARE版

    1 环境准备 OpenWrt镜像 在vmware中安装的镜像源下载地址 openwrt releases安装包下载 开源镜像站 阿里云本例使用的是22 03 2版本 下载地址https mirrors aliyun com openwrt
  • Prime Cuts【预处理】【素数筛法】

    有些东西只有你WA的多了 才有发言权 题记 题面 A prime number is a counting number 1 2 3 that is evenly divisible only by 1 and itself In this
  • 2019年第十届蓝桥杯国赛B组试题G-排列数-next_permutation枚举,模拟

    在一个排列中 一个折点是指排列中的一个元素 它同时小于两边的元素 或者同时大于两边的元素 对于一个 1 n 的排列 如果可以将这个排列中包含 t个折点 则它称为一个 t 1 单调序列 例如 排列 1 4 2 3 是一个 3 单调序列 其中
  • 阶乘质因子分解(唯一分解定理)

    阶乘质因子分解 题目描述 对N 进行质因子分解 输入输出格式 输入格式 输入数据仅有一行包含一个正整数N N lt 10000 输出格式 输出数据包含若干行 每行两个正整数p a 中间用一个空格隔开 表示N 包含a个质因子p 要求按p的值从

随机推荐

  • 【概率论与数理统计】猴博士 笔记 p29-32 均匀分布、泊松分布、指数分布、几何分布

    均匀分布U 题型 已知某随机变量满足某分布 求对应的概率 期望 方差 也是套公式 例1 设随机变量X U 2 5 求P X gt 4 EX DX 套公式得 p x 4
  • 解决Tomcat启动控制台输出中文信息乱码 [亲测好用]

    解决Tomcat启动控制台输出中文信息乱码 亲测好用 文章目录 解决Tomcat启动控制台输出中文信息乱码 亲测好用 一 问题描述 Tomcat启动控制台输出信息乱码解决 二 问题分析 Tomcat日志之所以出现中文乱码问题是因为日志输出的
  • 2012年蓝桥杯省赛-汉诺塔

    题目 题目链接 题解 题目本身很简单 但是我想提醒几点 会推导出结论 2 n 1 2 n 1 2n 1 特殊的输出方式 对于汉诺塔问题 存在递推公式
  • (Jquery功能篇) JPage分页控件实例代码

    截图 使用JPage实现分页效果图 第一步 加载JPage插件 相关资源文件和Js代码 截图所示 第二步 编写相关js 代码 function bindDate 删除相关数据 删除Id为edc的tbody的相关数据 移除Class为cont
  • 2020-10-17第十一届第二场蓝桥杯JavaB组

    第十一届第二场蓝桥杯JavaB组 题解 试题 B 寻找 2020 本题总分 5 分 问题描述 小蓝有一个数字矩阵 里面只包含数字 0 和 2 小蓝很喜欢 2020 他想找 到这个数字矩阵中有多少个 2020 小蓝只关注三种构成 2020 的
  • 合规性强的第三方收款工具受青睐 报告:连连国际使用频率排名第一

    经过多年发展 我国跨境电商已经完成第一轮草根式高增长 进入规模化出海阶段 这也进一步促使银行 跨境支付机构 跨境电商平台等不断优化升级产品方案 深化出海全链路服务生态 全力帮助外贸企业 中国品牌开辟出海新路径 实现新发展 在对跨境企业现状及
  • 《Stable Diffusion web UI-Segment Anything未完待续01》

    最近每天晚上都在弄手指修复 但是都不理想 索性放在后面再写教程 今天中午花时间弄了一下Segment Anything 1 下载Segment Anything 点击拓展 从网址安装 安装 已安装 点击重启 2 点击这个项目红色框里面的 h
  • 【机器学习实战】8、预测数值型数据:回归

    文章目录 8 1 用线性回归找到最佳拟合直线 8 1 1 线性回归 8 1 2数据可视化 8 1 3 求回归系数向量 并根据系数绘制回归曲线 8 2 局部加权线性回归 LWLR 8 3 预测鲍鱼年龄 8 4 岭回归 8 5 前向逐步回归 8
  • linux 模拟postman进行post提交

    curl H Content Type application json charset utf 8 H Data Type msg X POST data mobile 13366088888 name 哈哈 http 192 168 1
  • 使用Jtest 2022.2简化严格的Java测试

    阅读本文 您可以了解您的开发团队如何利用Parasoft Jtest 2022 2 中包含的先进功能和增强功能来简化 Java 测试 如果开发人员没有自动化测试流程 Java和JUnit测试对他们来说可能是耗时且具有挑战性的 随着Paras
  • 使用Python将TXT转为Excel

    第一步 我们创建一个txt文件 内容为图中所示 第二步 开始写代码 导入openpyxl用于excel操作 from openpyxl import Workbook 新建保存结果的excel sheet wb Workbook r res
  • 二、大数据实践项目——数据分析与处理

    一 数据处理主要任务 二 数据集处理 1 查看数据集基本情况 调用 info 函数来查看数据data的基本情况 包括数据维度 字段名称和类型以及有无缺失值 数据占用内存等 以下为部分字段信息 可见总的数据47447行 少于此数值的为有数据缺
  • 矩阵的1/2次方

    矩阵的1 2次方 求矩阵的1 2次方的前提是A为正定阵 这时A一定相似于主对角元素都为正数的对角阵 也就是说存在可逆阵P 使得 P 1 AP dia 1 2 n 是对角阵 取B Pdiag 1 2 n P 1 则B 2 A 即B A 1 2
  • 分析如何用万能表测试MOS管好坏的小窍门

    现在家电 照明 汽车电子等领域行业开关管均采用性能优异的MOS管取代过去的大功率晶体三极管 使整体的效率 可靠性 故障率均大幅的下降 虽说是大幅降低 但也会出现损坏的情况 由于MOS管和大功率晶体三极管在结构 特性有着本质上的区别 在应用上
  • Java堆内存是线程共享的吗

    转载声明 Java堆内存是线程共享的 面试官 你确定吗 Java作为一种面向对象的 跨平台语言 其对象 内存等一直是比较难的知识点 所以 即使是一个Java的初学者 也一定或多或少的对JVM有一些了解 可以说 关于JVM的相关知识 基本是每
  • 堆叠注入原理解析

    文章目录 一 堆叠注入原理 二 堆叠注入触发条件 三 题目 一 堆叠注入原理 mysql数据库sql语句的默认结束符是以 结尾 在执行多条SQL语句时就要使用结束符隔开 那么在 结束一条sql语句后继续构造下一条语句 是否会一起执行 因此这
  • Shell脚本调试技巧

    脚本调试的主要工作就是发现引发脚本错误的原因以及脚本源代码中定位错误行 归纳汇总了SHELL脚本的总总方法 供大家学习参考 方式一 通过echo方式 功能 最简单的调试方法 可以在任何怀疑出错的地方用echo打印变量 场合 所有怀疑可能有问
  • 华硕PRIME Z390-P主板设置开启虚拟化技术

    没开虚拟化技术virtual box只能创建32位的系统 开启之后才能创建windows 7 64位系统 参考文章 https shiyousan com post 636245851547291596 https jingyan baid
  • Vue中下载不同文件的几种方式

    当在Vue中需要实现文件下载功能时 我们可以有多种方式来完成 下面将介绍五种常用的方法 1 使用window open方法下载文件
  • 【BZOJ3309】DZY Loves Math

    3309 DZY Loves Math Time Limit 20 Sec Memory Limit 512 MB Submit 411 Solved 161 Submit Status Discuss Description 对于正整数n