[蓝桥杯 2018 国 B] 矩阵求和

这篇具有很好参考价值的文章主要介绍了[蓝桥杯 2018 国 B] 矩阵求和。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

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

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

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

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

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

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

输入格式

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

输出格式

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

输入输出样例

输入 #1复制

4

输出 #1复制

48

说明/提示

对于 30\%30% 的数据,n\le 1000n≤1000。

存在 10\%10% 的数据,n = 10^5n=105。

对于 60\%60% 的数据,n\le 10^6n≤106。

对于 100\%100% 的数据,n\le 10^7n≤107。

 解题思路:要求∑∑gcd(i,j)²,

枚举最大公约数d,∑d∑∑(gcd(i,j)²==d)

把d替换成d²,∑d²∑∑(gcd(i,j)==d)

又(i/gcd(i,j))*(j/gcd(i,j))=1,上式化为[蓝桥杯 2018 国 B] 矩阵求和

 第三个求和可以用欧拉函数表示,即[蓝桥杯 2018 国 B] 矩阵求和

 接下来线性筛法求欧拉函数然后前缀和即可。文章来源地址https://www.toymoban.com/news/detail-477746.html

#include<bits/stdc++.h> 
using namespace std;
typedef long long ll;
const int N=1e7+5;
int presum[N];
vector<int>prime;
bool vis[N];
int phi[N];
void get_phi(int n)
{
    phi[1]=1;
    for(int i=2;i<=n;i++)
    {
        if(!vis[i])
        {
            phi[i]=i-1;
            prime.emplace_back(i);
        }
        for(int j=0;j<prime.size()&&i*prime[j]<=n;j++)
        {
            vis[i*prime[j]]=true;
            if(i%prime[j]==0)
            {
                phi[i*prime[j]]=phi[i]*prime[j];break;
            }
            else phi[i*prime[j]]=phi[i]*(prime[j]-1);
        }
    }
}
int main( )
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n;cin>>n;
    int mod=1e9+7;
    get_phi(n);
    for(int i=1;i<=n;i++)
    {
        presum[i]=presum[i-1]+phi[i];presum[i]%=mod;
    }
    ll ans=0;
    for(ll i=1;i<=n;i++)
    {
        ans=(ans+((i*i%mod)*(presum[n/i]*2-1))%mod)%mod;
    }
    cout<<ans;
    return 0;
}

到了这里,关于[蓝桥杯 2018 国 B] 矩阵求和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最短路:P8674 [蓝桥杯 2018 国 B] 调手表

    小明买了块高端大气上档次的电子手表,他正准备调时间呢。 在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟。 大家都知道,手表只有一个按钮可以把当前的数加一。在调分钟的时候,如果当前显示的数是 0,那么按一下按钮就会变成 1,再按一次

    2024年02月14日
    浏览(36)
  • 蓝桥杯专题-试题版-【完美的代价】【芯片测试】【序列求和】【杨辉三角形】

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 点击跳转=软考全系列 点击跳转=蓝桥系列 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、

    2024年02月11日
    浏览(41)
  • 洛谷P8772 [蓝桥杯 2022 省 A] 求和 C语言/C++

    给定 n n n 个整数 a 1 , a 2 , ⋯   , a n a_{1}, a_{2}, cdots, a_{n} a 1 ​ , a 2 ​ , ⋯ , a n ​ , 求它们两两相乘再相加的和,即 S = a 1 ⋅ a 2 + a 1 ⋅ a 3 + ⋯ + a 1 ⋅ a n + a 2 ⋅ a 3 + ⋯ + a n − 2 ⋅ a n − 1 + a n − 2 ⋅ a n + a n − 1 ⋅ a n S=a_{1} cdot a_{2}+a_{1} cdot a_{3}+cdots+a_{1} cdot a_{n}+a_{2}

    2023年04月14日
    浏览(36)
  • [洛谷]P8662 [蓝桥杯 2018 省 AB] 全球变暖(dfs)

    读题不规范,做题两年半!  注意:被海水淹没后的陆地应用另一个字符表示,而不是把它变为海洋,这个点可以便利,但不能被当作起点,不然就只有 36 分。 ACocde:  over~

    2024年02月16日
    浏览(37)
  • 蓝桥杯专题-试题版含答案-【风险度量】【括号配对问题】【ASCII码排序】【素数求和】

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 点击跳转=软考全系列 点击跳转=蓝桥系列 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、

    2024年02月11日
    浏览(85)
  • 矩阵对角线元素求和

    输入一个5×5的数组,分别求其主对角线和辅对角线上元素之和。 输入: 5×5的数组 输出: 主对角线和辅对角线上元素之和 输入样例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 输出样例: 65 65 提示: 主对角线为从矩阵的左上角至右下角的连线,在数组中即指行列下

    2024年02月04日
    浏览(55)
  • 矩阵对角线求和(c语言)

    求一个3×3矩阵对角线元素之和。 矩阵 主对角线 副对角线 元素和  

    2024年02月03日
    浏览(51)
  • C语言二维数组中:主次对角线求和,上下三角求和,杨辉三角,矩阵转置

     p8 有些的结论需要直接记住 目录 矩阵转置  主对角线和次对角线 下三角 和上三角(一般是让求和) 下三角  上三角 杨辉三角 不是方阵 需要用到第二个二维数组  b[i][j]=a[i][j] 是方阵     方法1 借助第二个二维数组,同上 方法2    下三角换即可(是方阵的话一般题目都

    2024年01月22日
    浏览(52)
  • Labview2018学习之七:数组、矩阵与簇

    1.数组        在程序设计语言中,“数组”是一种常用的数据结构,是相同类型数据的集合,是一种存储和组织相同类型数据的良好方式。与其他程序设计语言一样,LabVIEW中的数组是数值型、布尔型、字符串型等多种数据类型中的同类数据的集合,在前面板的数组对象往往

    2024年02月04日
    浏览(45)
  • C语言数据结构课设:矩阵的运算(转置.求和.求差.矩阵相乘.求逆.数乘),文件读取矩阵

      #include stdio.h #include string.h #includestdlib.h #includemath.h // 定义一个结构体类型,表示一个矩阵 typedef struct matrix {     int nrow; // 矩阵的行数     int ncol; // 矩阵的列数     double data[10][10]; // 矩阵的数据,最大为 10 x 10 } matrix; // 定义一个函数,用于显示一个矩阵的内容  void dis

    2024年03月27日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包