题目链接

题目

题目描述

最近,华东交通大学ACM训练基地的老阿姨被一个数学问题困扰了很久,她希望你能够帮她解决这个问题。

这个数学问题是这样的,给你一个N,要求你计算

gcd(a,b)表示a和b的最大公约数

输入描述

多组输入,每行一个整数n(1<=n<=10^14)。

输出描述

每行一个整数,表示答案。由于答案会很大你要对1000000007取模。

示例1

输入

4
10

输出

6
35

说明

样例一,2+4=6。

样例二,2+4+5+6+8+10=35。

题解

知识点:欧拉函数,GCD与LCM。

简单推一下式子:

\[\begin{aligned}
\sum_{i=1}^n i[\gcd(i,n) \neq 1] &= \sum_{i=1}^n i(1-[\gcd(i,n) = 1])\\
&= \frac{n(n+1)}{2} - \sum_{i=1}^n i[\gcd(i,n) = 1]\\
&= \frac{n(n+1)}{2} - \frac{n\varphi(n) + [n = 1]}{2}
\end{aligned}
\]

第二行后面一项表示 \([1,n]\) 中和 \(n\) 互质的数的和,可以用欧拉函数 \(O(1)\) 得到。

简单证明一下:与 \(n(n\geq3)\) 互质的数总是成对出现的 \(x,n-x\) ,因此每一对的和都是 \(n\) ,所以答案就是 \(\varphi(n)\) 乘以 \(\dfrac{n}{2}\) 。特别地, \(n = 2\) 时答案和公式一样,\(n=1\) 时加一个简单修正即可。

另外,这个证明也可以看出来,与 \(n(n\geq 3)\) 互质的数总是偶数个。

其中欧拉函数每个需要单独求,即需要对 \(n\) 分解质因数。

时间复杂度 \(O(\sqrt n)\)

空间复杂度 \(O(1)\)

代码

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using i128 = __int128_t; const int P = 1e9 + 7; ll euler_one(ll n) {
ll ans = n;
for (ll i = 2;i * i <= n;i++) {
if (!(n % i)) {
ans = ans / i * (i - 1);
while (!(n % i)) n /= i;
}
}
if (n > 1) ans = ans / n * (n - 1);
return ans;
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
ll n;
while (cin >> n) cout << int(((i128)n * (n + 1) / 2 - ((i128)n * euler_one(n) + (n == 1)) / 2) % P) << '\n';
return 0;
}

NC20667 数学题的更多相关文章

  1. ytu 2558: 游起来吧!超妹!(水题,趣味数学题)

    2558: 游起来吧!超妹! Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 7  Solved: 3[Submit][Status][Web Board ...

  2. sdut 2416:Fruit Ninja II(第三届山东省省赛原题,数学题)

    Fruit Ninja II Time Limit: 5000MS Memory limit: 65536K 题目描述 Have you ever played a popular game name ...

  3. python解无忧公主数学题107.py

    python解无忧公主数学题107.py """ python解无忧公主数学题107.py http://mp.weixin.qq.com/s?__biz=MzI5ODE ...

  4. python解无忧公主数学题108

    """ python解无忧公主数学题108回文.py 题目来源: http://mp.weixin.qq.com/s?__biz=MzI5ODEwMDQyNw==& ...

  5. HDU 圆桌会议 - 数学题

    圆桌   题意就是每分钟可以将相邻的两个人的位置互换一下 , 问你 ,几分钟可以将所有人的位置互换成    原先的  B 在A的右边 C在A的左边 , 换成现在的 C 在A 的右边 , B 在 A 的 ...

  6. HDU 2529 Shot (物理数学题)

    题目 解题过程: //物理数学题 #include<stdio.h> #include<string.h> #include<algorithm> using na ...

  7. HDU 2671 Can't be easier(数学题,点关于直线对称)

    题目 //数学题//直线 y = k * x + b//直线 ax+by+c=0; 点 (x0,y0); 点到直线距离 d = (ax0+by0+c)/sqrt(a^2+b^2) /********* ...

  8. ACM之数学题

    数学题,始终记得,第一次被带飞师大校赛以及省赛,毫无例外的在数学题上卡死....因此,现在开始,有意识的保留遇见的数学题...(下列知识点按遇见先后顺序排列: 1欧拉公式 欧拉公式的用处是,找出小于N ...

  9. hdu 5587 Array 数学题

    Array Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5587 De ...

  10. Codeforces Round #332 (Div. 2) D. Spongebob and Squares 数学题枚举

    D. Spongebob and Squares Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/ ...

随机推荐

  1. kafka 在 zookeeper 中保存的数据内容

    转载请注明出处: 1. 服务器上下载 kafka : wget https://archive.apache.org/dist/kafka/2.4.0/kafka_2.12-3.2.0.tgz 2.  ...

  2. Angular系列教程之DOM操作

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  3. Vue事件方法中this.属性名

    vue事件方法中访问data对象中的成员 : this.属性名 注意: 如果事件处理代码没有写到methods中,而是写在行内则不需要this.

  4. 安卓系统如何使用谷歌框架下的app?

    1.问题 安卓系统从理论上无法使用谷歌框架下的应用(比如像GMail,YouTube,Google play等等),会导致一些麻烦(闪退,卡在登陆界面等等) 注意:使用前提是会魔法,否则请绕道 2.解 ...

  5. 2023-SWPU NSS秋季招新赛(校外赛道)Misc—我要成为原神高手WP

    1.题目信息 我是神里绫华的狗!!! 2.解题方法 有个genshin.h文件夹,打开看看发现里面是一堆文件夹0 1A 1A0等等,而且每个文件夹里面都有文件,0 1A 1A0...看着很眼熟,我们用 ...

  6. Go-数组-切片

  7. Mygin实现分组路由Group

    本篇是Mygin第五篇 目的 实现路由分组 为什么要分组 分组控制(Group Control)是 Web 框架应该提供的基础功能之一,对同一模块功能的开发,应该有相同的前缀.或者对一部分第三方接口, ...

  8. Mygin实现上下文

    本篇是Mygin的第三篇 目的 将路由独立出来,方便后续扩展修改 上下文Context,对http.ResponseWriter和http.Request进行封装,实现对JSON.HTML等的支持 路 ...

  9. [转帖]oracle通过pid查找执行SQL

    通过TOP 命令查看PID:1560 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1560 oracle 20 0 38.978g 0. ...

  10. [转帖]如何通过JMeter测试金仓数据库KingbaseES并搭建环境

    1.安装JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,主要用于对软件的压力测试,它最初被设计用于Web应用测试,但后来扩展到其它测试领域.它可测试静态.动 ...