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.pswp.cn/news/712629.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712629.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712629.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GRPC 錯誤碼表

code數描述OK0不是錯誤;成功返回。CANCELLED1操作通常由調用方取消。UNKNOWN2未知錯誤。例如&#xff0c;當從另一個地址空間接收的值屬于此地址空間中未知的錯誤空間時&#xff0c;可能會返回此錯誤。此外&#xff0c;未返回足夠錯誤信息的 API 引發的錯誤可能會轉換為此錯誤。…

ggplot去除背景

在ggplot2中去除背景&#xff0c;通常指的是去除圖表的灰色背景和網格線&#xff0c;使圖表背景變為透明或白色&#xff0c;以及去除或簡化坐標軸的背景。這可以通過調整主題&#xff08;theme&#xff09;來實現。ggplot2提供了多種主題設置&#xff0c;可以用來調整圖表的外觀…

Spring MVC 和 Spring Cloud Gateway不兼容性問題

當啟動SpringCloudGateway網關服務的時候&#xff0c;沒注意好依賴問題&#xff0c;出現了這個問題&#xff1a; Spring MVC found on classpath, which is incompatible with Spring Cloud Gateway. 解決辦法就是&#xff1a;刪除SpringMVC的依賴&#xff0c;即下列依賴。 &…

ChatGPT/GPT4科研應用與AI繪圖及論文高效寫作

原文&#xff1a;ChatGPT/GPT4科研應用與AI繪圖及論文高效寫作 第一&#xff1a;2024年AI領域最新技術 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大訊飛-星火認知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智譜AI-GLM-4 第二&#xff1a;…

【C++從0到王者】第四十六站:圖的深度優先與廣度優先

文章目錄 一、圖的遍歷二、廣度優先遍歷1.思想2.算法實現3.六度好友 三、深度優先遍歷1.思想2.代碼實現 四、其他問題 一、圖的遍歷 對于圖而言&#xff0c;我們的遍歷一般是遍歷頂點&#xff0c;而不是邊&#xff0c;因為邊的遍歷是比較簡單的&#xff0c;就是鄰接矩陣或者鄰接…

《匯編語言》第3版 (王爽)檢測點3.1解析

第三章 檢測點3.1 &#xff08;1&#xff09;.在Debug中&#xff0c;用“d 0:0 1f”查看內存&#xff0c;結果如下。 下面的程序執行前&#xff0c;AX 0&#xff0c;BX 0&#xff0c;寫出每條匯編指令執行完后相關寄存器中的值。 mov ax,1 ;將1放入AX寄存器中&#xff0c;…

GC如何判定對象已死

GC判定對象已死的2種方法 引用計數法 給對象中添加一個引用計數器&#xff0c;每當有一個地方引用它時&#xff0c;計數器值就加1&#xff1b;當引用失效時&#xff0c;計數器值就減1&#xff1b;Java語言中沒有選用引用計數算法來管理內存&#xff0c;其中最主要的原因是它很…

【零基礎SRC】成為漏洞賞金獵人的第一課:加入玲瓏安全漏洞挖掘班。

我們是誰 你是否對漏洞挖掘充滿好奇&#xff1f;零基礎或有基礎但想更進一步&#xff1f;想賺取可觀的漏洞賞金讓自己有更大的自由度&#xff1f; 那么&#xff0c;不妨了解下我們《玲瓏安全團隊》。 玲瓏安全團隊&#xff0c;擁有多名實力講師&#xff0c;均就職于互聯網頭…

一線互聯網大廠中高級Android面試真題收錄,記一次字節跳動Android社招面試

在開始回答前&#xff0c;先簡單概括性地說說Linux現有的所有進程間IPC方式&#xff1a; 1. **管道&#xff1a;**在創建時分配一個page大小的內存&#xff0c;緩存區大小比較有限&#xff1b; 2. 消息隊列&#xff1a;信息復制兩次&#xff0c;額外的CPU消耗&#xff1b;不合…

指針與malloc動態內存申請,堆和棧的差異

定義了兩個函數print_stack()和print_malloc()&#xff0c;分別演示了兩種不同的內存分配方式&#xff1a;棧內存和堆內存。然后在main()函數中調用這兩個函數&#xff0c;并將它們返回的指針打印出來。 由于print_stack()中的數組c是在棧上分配的&#xff0c;當函數返回后&…

【哈希表算法題記錄】242.有效的字母異位詞

題目鏈接 這題思路比較簡單&#xff0c;考慮到26個小寫字母的ASCII是連續的&#xff0c;那么我們可以設置一個size為26的哈希表record&#xff0c;然后記錄26個字母分別在string中出現的次數。例如&#xff0c;record[0]記錄的是字母‘a’出現的次數。于是我們主要就是要獲得每…

Python裝飾器的使用詳解

目錄 1、函數裝飾器 1.1、閉包函數 1.2、裝飾器語法 1.3、裝飾帶參數的函數 1.4、被裝飾函數的身份問題 1.4.1、解決被裝飾函數的身份問題 1.5、裝飾器本身攜帶/傳參數 1.6、嵌套多個裝飾器 2、類裝飾器 裝飾器顧名思義作為一個裝飾的作用&#xff0c;本身不改變被裝…

Acwing 周賽135 解題報告 | 珂學家 | 反悔堆貪心

前言 整體評價 VP了這場比賽&#xff0c; T3挺有意思的&#xff0c;反悔貪心其實蠻套路的。 A. 買蘋果 思路: 簽到 n, x list(map(int, input().split())) print (n // x)B. 牛群 思路: 分類討論 from collections import Counters input() cnt Counter(s)lists sorte…

WPF 【十月的寒流】學習筆記(2):MVVM中是怎么實現通知的

文章目錄 前言相關鏈接代碼倉庫項目配置代碼初始代碼ViewPersonViewModel 嘗試老辦法通知解決方案ObservableCollectionBindingListICollectionView 總結 前言 我們這次詳細了解一下列表通知的底層是怎么實現的 相關鏈接 十月的寒流 MVVM實戰技巧之&#xff1a;可被觀測的集合…

2024年【A特種設備相關管理(電梯)】考試總結及A特種設備相關管理(電梯)證考試

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 2024年A特種設備相關管理&#xff08;電梯&#xff09;考試總結為正在備考A特種設備相關管理&#xff08;電梯&#xff09;操作證的學員準備的理論考試專題&#xff0c;每個月更新的A特種設備相關管理&#xff08;電梯…

KVM部署Windriver Linux操作系統

安裝前準備 創建密碼配置文件&#xff0c;否則虛機啟動后無法登錄 cd /var/lib/libvirt/images/disks/windriver/ docker run -ti --rm quay.io/coreos/mkpasswd --methodyescrypt 123456 >password_hash.txt cat <<-ENDOF> sample.bu variant: fcos version: 1.4…

面試 Java 基礎八股文十問十答第十二期

面試 Java 基礎八股文十問十答第十二期 作者&#xff1a;程序員小白條&#xff0c;個人博客 相信看了本文后&#xff0c;對你的面試是有一定幫助的&#xff01;關注專欄后就能收到持續更新&#xff01; ?點贊?收藏?不迷路&#xff01;? 1&#xff09;創建一個對象用什么關…

代碼隨想錄day27:貪心part1,基礎篇

文章目錄 day27&#xff1a;貪心part1&#xff0c;基礎篇455.分發餅干376.擺動序列53.最大子數組和 day27&#xff1a;貪心part1&#xff0c;基礎篇 455.分發餅干 循環結束條件注意餅干比孩子多的情況 class Solution {public int findContentChildren(int[] g, int[] s) {A…

C++:非靜態成員默認初始化

C11之前只有常靜態成員變量才能進行默認初始化&#xff0c;其它變量初始化時總要進行繁瑣的過程 class A{int a; public:A():a(10){} };C11開始支持非靜態成員的默認初始化&#xff0c;默認初始化和初始化參數列表同時初始化一個變量時會使用初始化參數列表&#xff0c;不進行…

JavaScript new、apply call 方法

new、apply、call、bind JavaScript 中的 apply、call和 bind 方法是前端代碼開發中相當重要的概念&#xff0c;并且與 this 的指向密切相關 new new 關鍵詞的主要作用 就是執行一個構造函數、返回一個實例對象 根據構造函數的情況&#xff0c;來確定是否可以接受參數的傳遞…