【题目描述】 走廊里有 n 盏灯,编号依次为1 ,2 ,3 ,…,n ,由学校电路控制中心管理。初始时,所有灯都是关闭的。某黑客入侵了学校电路控制中心,黑客想让灯忽明忽暗,进行了 n 轮操作。第 i 轮操作,会让所有编号为 i 的倍数的灯状态反转,也就是打开的变为关闭,关闭的变为打开。 现在黑客想知道,n 轮操作后,所有亮着的灯的编号之和为多少。因为答案很大,只需输出答案对 109+7 取模的结果。 【输入】 一个整数 n ,表示灯的个数。对于100 % 的数据1≤n≤1018 。 【输出】 一个整数,表示亮着的灯的编号之和对109+7 取模的结果。 【输入样例】 20 【输出样例】 30C++
时间: 2024-04-19 09:27:29 浏览: 116
抱歉,之前给出的解答是使用 Python 编写的。以下是使用 C++ 编写的代码实现:
```cpp
#include <iostream>
using namespace std;
const long long MOD = 1e9 + 7;
long long sumOfSquares(long long n) {
long long sum = 0;
for (long long i = 1; i * i <= n; i++) {
sum += (i * i) % MOD;
sum %= MOD;
}
return sum;
}
int main() {
long long n;
cin >> n;
long long ans = sumOfSquares(n);
cout << ans << endl;
return 0;
}
```
这段代码定义了一个 `sumOfSquares` 函数,用于计算小于等于 n 的完全平方数之和。然后在 `main` 函数中,读取输入的 n,调用 `sumOfSquares` 函数计算结果,并输出。
注意,对于大整数的计算,需要使用 `long long` 类型,并且在每一步计算后都要对 MOD 取模,以避免溢出。
希望对你有帮助!如果你有任何问题,请随时提问。
阅读全文