gcd+线性dp,[蓝桥杯 2018 国 B] 矩阵求和

一、题目

1、题目描述

经过重重笔试面试的考验,小明成功进入 Macrohard 公司工作。

今天小明的任务是填满这么一张表:

表有 �n 行 �n 列,行和列的编号都从 11 算起。

其中第 �i 行第 �j 个元素的值是 gcd⁡(�,�)gcd(i,j) 的平方,gcd⁡gcd 表示最大公约数,以下是这个表的前四行的前四列:

1  1  1  1
1  4  1  4
1  1  9  1
1  4  1 16

小明突然冒出一个奇怪的想法,他想知道这张表中所有元素的和。 由于表过于庞大,他希望借助计算机的力量。

2、输入输出

2.1输入

一行一个正整数 �n 意义见题。

2.2输出

一行一个数,表示所有元素的和。由于答案比较大,请输出模 10000000071000000007(即109+7109+7)后的结果。

3、原题链接

P8670 [蓝桥杯 2018 国 B] 矩阵求和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)


二、解题报告

1、思路分析

先对公式进行化简

我们外层枚举需要O(n)的时间复杂度,那么对于f[k]的计算有没有快速的方法?

1  1  1  1
1  4  1  4
1  1  9  1
1  4  1 16

以示例为例,我们先考虑以2为公因数(注意并非gcd)的(i,j)数,显然有[4 / 2] * [4 / 2] = 4个

而此时矩阵中有3个2,原因是第四个2被16替代了,因为4作为比2大的数是(4,4)的gcd

因此我们可以得出以k为gcd的(i,j)数为[n / k] * [n/ k] - f[j](j为k的倍数)

这样就得到了f[]的转移方程,这个状态转移是O(lnn)的

注意写代码时若干运算的选择,很可能因为多进行一次取模而导致没过

nlnn对于1e7数据量而言还是有点慢

2、复杂度

时间复杂度: O(nlnn)空间复杂度:O(n)

3、代码详解

#include <iostream>
#include <cstring>
using namespace std;
#define int long long
const int N = 1e7 + 10, mod = 1e9 + 7;
int n, f[N], res = 0;
void solve()
{cin >> n;for (int i = n; i >= 1; i--){f[i] = ((n / i) * (n / i)) % mod;for (int j = i << 1; j <= n; j += i)f[i] = (f[i] - f[j] + mod) % mod;res = (res + f[i] * (i * i) % mod) % mod;}cout << res;
}
signed main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);//freopen("in.txt", "r", stdin);int _ = 1;while (_--)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/502395.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试笔记(三):黑盒测试

1 黑盒测试概述 黑盒测试也叫功能测试&#xff0c;通过测试来检测每个功能是否都能正常使用。在测试中&#xff0c;把程序看作是一个不能打开的黑盒子&#xff0c;在完全不考虑程序内部结构和内部特性的情况下&#xff0c;对程序接口进行测试&#xff0c;只检查程序功能是否按…

类加载的过程以及双亲委派模型

类加载&#xff0c;指的是java进程运行的时候&#xff0c;需要把.class文件从硬盘&#xff0c;读取到内存&#xff0c;并进行一系列的校验解析的过程。&#xff08;.class文件 > 类对象&#xff0c;硬盘 > 内存&#xff09; 类加载的过程&#xff0c;类加载的过程其实是在…

【Leetcode每日一刷】贪心算法|122.买卖股票的最佳时机 II、55. 跳跃游戏

一、122.买卖股票的最佳时机 II 力扣题目链接 &#x1f984;解题思路&#xff1a; 首先需要明确的几个点&#xff1a; 当前只能有最大一支股票每一天操作只能3选1&#xff1a;买or卖or休息 此外&#xff0c;对于贪心&#xff0c;总有像下面图示的一种直觉&#xff1a;如果…

2024年3月2日 十二生肖 今日运势

小运播报&#xff1a;2024年3月2日&#xff0c;星期六&#xff0c;农历正月廿二 &#xff08;甲辰年丙寅月乙丑日&#xff09;&#xff0c;法定节假日。 红榜生肖&#xff1a;鸡、蛇、鼠 需要注意&#xff1a;狗、马、羊 喜神方位&#xff1a;西北方 财神方位&#xff1a;东…

bert 相似度任务训练,简单版本

目录 任务 代码 train.py predit.py 数据 任务 使用 bert-base-chinese 训练相似度任务&#xff0c;参考&#xff1a;微调BERT模型实现相似性判断 - 知乎 参考他上面代码&#xff0c;他使用的是 BertForNextSentencePrediction 模型&#xff0c;BertForNextSentencePred…

AI也来打掼蛋,难道人工智能也能当领导?

引言&#xff1a;探索AI在复杂卡牌游戏中的决策能力 在人工智能&#xff08;AI&#xff09;的研究领域中&#xff0c;游戏被视为现实世界的简化模型&#xff0c;常常是研究的首选平台。这些研究主要关注游戏代理的决策过程。例如&#xff0c;中国的传统卡牌游戏“掼蛋”&#…

Windows Docker 部署 Jenkins

一、简介 今天介绍一下在 Windows Docker 中部署 Jenkins 软件。在 Windows Docker 中&#xff0c;分为两种情况 Linux 容器和 Windows 容器。Linux 容器是通常大多数使用的方式&#xff0c;Windows 容器用于 CI/CD 依赖 Windows 环境的情况。 二、Linux 容器 Linux 容器内部…

LeetCode -- 79.单词搜索

1. 问题描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水…

【前沿热点视觉算法|Sora|GPT4一键升级】一种新的图像分割方法:具有边界注意的两级解码网络

计算机视觉算法分享。问题或建议&#xff0c;请文章私信或者文章末尾扫码加微信留言。sora 具体介绍和使用方法&#xff1a;OpenAI Sora 下一代生产力&#xff1a;最新小白必看教程 | 解剖Sora的前世今生 | Sora核心源码目前 openai 官方还未开放 sora 灰度&#xff0c;不过根据…

黑马JavaWeb课程中安装vue脚手架出现的问题

1 安装node.js 要想前端工程化&#xff0c;必须安装node.js&#xff0c;前端工程化的环境。 在成功安装node.js后&#xff0c; 修改全局包安装路径为Node.js安装目录&#xff0c; 修改npm镜像源为淘宝镜像源&#xff0c;这里出现第一个问题&#xff0c;视频中给的淘宝镜像为&…

抽象类、模板方法模式

抽象类概述 在Java中abstract是抽象的意思&#xff0c;如果一个类中的某个方法的具体实现不能确定&#xff0c;就可以申明成abstract修饰的抽象方法&#xff08;不能写方法体了&#xff09;&#xff0c;这个类必须用abstract修饰&#xff0c;被称为抽象类。 抽象方法定义&…

WSL2编译RV1126 SDK

接上一篇《WSL2部署RV1126 SDK编译环境》 1 编译配置 ./build.sh device/rockchip/rv1126_rv1109/aio-rv1126-jd4.mk 2 关闭Qt&#xff08;可选&#xff09; vim buildroot/configs/firefly_rv1126_rv1109_defconfig 3 启用ROS&#xff08;可选&#xff09; vim buildroot/conf…