标题:矩阵求和

经过重重笔试面试的考验,小明成功进入 Macrohard 公司工作。
今天小明的任务是填满这么一张表:
表有 n 行 n 列,行和列的编号都从1算起。
其中第 i 行第 j 个元素的值是 gcd(i, j)的平方,
gcd 表示最大公约数,以下是这个表的前四行的前四列:
1  1  1  1
1  4  1  4
1  1  9  1
1  4  1 16

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

「输入格式」
一行一个正整数 n 意义见题。

「输出格式」
一行一个数,表示所有元素的和。由于答案比较大,请输出模 (10^9 + 7)(即:十亿零七) 后的结果。

「样例输入」
4

「样例输出」
48

「数据范围」
对于 30% 的数据,n <= 1000
存在 10% 的数据,n = 10^5
对于 60% 的数据,n <= 10^6
对于 100% 的数据,n <= 10^7

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 2000ms

思路:数论题,莫比乌斯反演. 感谢队友cc的大力支持~

#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 1000000007
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
const int maxn = 1e7+7;
const double esp = 1e-12;
const int ff = 0x3f3f3f3f;
map<int,int>::iterator it;ll inv6;int mu[maxn],vis[maxn],pri[maxn],len;
void init() {memset(vis, 0, sizeof vis);mu[1] = 1; len = 0;for (int i = 2; i < maxn; ++i) {if (!vis[i]) {pri[len++] = i;mu[i] = -1;}for (int j = 0; j < len && i * pri[j] < maxn; ++j) {vis[i * pri[j]] = 1;if (i % pri[j]) mu[i * pri[j]] = -mu[i];else {mu[i * pri[j]] = 0;break;}}}for(int i = 1; i < maxn; i++){mu[i]+=mu[i-1];}
}//解决 gcd([1,n],[1,n]) == 1 的个数
ll dp[maxn];
ll solveGcd(ll n)
{ll ans = 0;int j;for(ll i = 1; i <= n; i=j+1){j = n/(n/i);ll tmp = (n/i)*(n/i);if(tmp >= mod) tmp %= mod;ans += (ll)(mu[j]-mu[i-1])*tmp;if(ans >= mod) ans %= mod;}return ans;
}ll qm(ll a, ll n){ll ans = 1;while(n){if(n%2){ans = ans*a%mod;}a = a*a%mod;n/=2LL;}return ans;
}inline ll sump2(ll n)
{return n*(n+1)%mod*(2*n+1)%mod*inv6%mod;
}int main()
{inv6 = qm(6,mod-2);init();ll n;n = 10000000;ll ans = 0;ll j;for(ll i = 1; i <= n; i=j+1){j = n/(n/i);ans += solveGcd(n/i)*(sump2(j)-sump2(i-1)+mod)%mod;if(ans >= mod) ans %= mod;}cout << ans << endl;return 0;
} 

2018第九届蓝桥杯B组决赛题解第六题 矩阵求和相关推荐

  1. 2018第九届蓝桥杯B组决赛题解第一题 换零钞

    标题:换零钞 x星球的钞票的面额只有:100元,5元,2元,1元,共4种. 小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱. 小明有点强迫症,他坚持要求200元换 ...

  2. 2018第九届蓝桥杯B组决赛-搭积木

    标题:搭积木 小明对搭积木非常感兴趣.他的积木都是同样大小的正立方体. 在搭积木时,小明选取 m 块积木作为地基,将他们在桌子上一字排开,中间不留空隙,并称其为第0层. 随后,小明可以在上面摆放第1层 ...

  3. 2018第九届蓝桥杯JavaB组省赛真题及详解

    2018第九届蓝桥杯JavaB组省赛真题及详解 第一题:第几天 第二题:方格计数 第三题:复数幂 第四题:测试次数 第五题:快速排序 第六题:递增三元组 第七题:螺旋折线 第八题:日志统计 第九题:全 ...

  4. 2019第十届蓝桥杯A组决赛(国赛)A题(三升序列)

    2019第十届蓝桥杯A组决赛(国赛)A题(三升序列) 输入: VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG SDLLOVGRTWEYZKKXNK ...

  5. 2018第九届蓝桥杯JavaA组省赛真题详解

    目录 第一题:分数 第二题:星期一 第三题:复数幂 第四题:方格计数 第五题:打印图形 第六题:航班时间 第七题:三体攻击 第八题:全球变暖 第九题:倍数问题 第十题:付账问题 题解待更新 第一题:分 ...

  6. 2018 第九届 蓝桥杯 JavaB组 摔手机(动态规划解决)

    x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来, 之后才允许上市流通. ...

  7. 2018年第九届蓝桥杯 JavaB组省赛 刷题思路及答案

    前言 本人是二本院校大二的计算机系学生,已经报名了下一届的蓝桥杯省赛,整个寒假学习了很多算法知识,我是看<算法很美>这个课程学习算法的,一套学习下来确实受益匪浅,视频在b站上面都有. 此前 ...

  8. 2018第九届蓝桥杯大赛软件类B组C/C++省赛题解

    2018第九届蓝桥杯大赛软件类B组C/C++省赛目录 试题 A:第几天(结果填空) 试题 B:明码(结果填空) 试题 C:乘积尾0(结果填空) 试题 D:测试次数(结果填空) 试题 E:快速排序(结果 ...

  9. 第九届蓝桥杯JavaA组(2018年)省赛真题解析

    第九届蓝桥杯JavaA组(2018年)省赛真题解析 1.分数 1/1+1/2+1/4+1/8+1/16+- 每项是前一项的一半,如果一共有20项,求这个和是多少 结果用分数表示,类似: 3/2,当然这 ...

最新文章

  1. Eclipse编译时保留方法的形参
  2. TensorFlow入门:计算图
  3. 游戏企业的“逆袭”,从用好这套解决方案开始 →
  4. sun building in shanghai
  5. 如何用脚本可靠关闭一个linux服务或进程
  6. 监督学习 | SVM 之支持向量机Sklearn实现
  7. L1-023. 输出GPLT-PAT团体程序设计天梯赛GPLT
  8. java里氏替换原则例子_java 设计原则(六)里氏替换原则
  9. how to open files as sudo
  10. 80后:从“A”到“Z”的26条生存法则 (转)
  11. 自然语言处理基础技术工具篇之NLTK
  12. HTML5 webSQL查看表结构
  13. 利用史密斯圆图计算阻抗匹配网络的软件
  14. windows服务器防勒索病毒
  15. 清华大学计算机科学系王瑀屏,清华大学材料科学与工程系
  16. YOLOv5损失函数定义
  17. keras上运行Tensorflow-gpu的艰难历程(最新版,更新中)
  18. JavaScript高级程序设计[美]Nicholas C.Zakas著 读书笔记(一)
  19. 禁用计算机安全模式,安全模式
  20. matlab 数学形态学,数学形态学matlab程序

热门文章

  1. 软件项目管理和测试题,软件项目管理第一章测试题
  2. 圣诞来了,给喜欢的人做个表白网站(附完整源码)
  3. 深入理解操作系统实验——bomb lab(phase_1)
  4. 做谷歌广告投放关键字英文,只懂英文可以吗?
  5. 房屋装修合同书范本【收藏备用】
  6. 超简单vue-devtools工具安装
  7. 经济基础知识(初级)【15】
  8. 「前端架构」React,Angular还是Vue,太难选了?看完秒懂。
  9. 顺序结构、选择结构、循环结构
  10. Qt开源版下载官网地址 macOS