当前位置:网站首页>874. 筛法求欧拉函数
874. 筛法求欧拉函数
2022-08-10 03:41:00 【Hunter_Kevin】
题目
给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和。
输入格式
共一行,包含一个整数 n。
输出格式
共一行,包含一个整数,表示 1∼n 中每个数的欧拉函数之和。
数据范围
1≤n≤106
输入样例:
6
输出样例:
12



代码
#include <iostream>
using namespace std;
typedef long long LL;
const int N = 1000010;
int primes[N], phi[N], cnt;
bool s[N];
LL getPhiSum(int n){
phi[1] = 1;
// 线性筛法筛质数的过程中求每个被筛掉的数的欧拉函数
for(int i = 2; i <= n; i++){
if(!s[i]){
primes[cnt++] = i;
phi[i] = i-1;//如果i是质数,那么根据欧拉函数定义,1~(i-1)都跟质数i互质,则phi[i] = i-1
}
for(int j = 0; primes[j] <= n/i; j++){
s[ primes[j] * i] = true;
if(i % primes[j] == 0){
phi[primes[j] * i] = primes[j] * phi[i];
break;
}
phi[primes[j] * i] = (primes[j]-1) * phi[i];
}
}
// 累加1~n中所有数的欧拉函数之和
LL res = 0;
for(int i = 1; i <= n; i++) res += phi[i];
return res;
}
int main()
{
int n;
cin >> n;
cout << getPhiSum(n) << endl;
return 0;
}
边栏推荐
猜你喜欢
随机推荐
【单调栈】【概念讲解&&模板代码】
Kotlin协程:父子协程的绑定与传递
shell文本编辑awk
多元函数的3D可视化,终于被我总结出来了,数学真是太美了
Flutter 如何安装 pub.dev 上的 package
Flink学习15:Flink自定义数据源
文件操作【c语言】
学习总结week4_1json
goland json.Marshal导致&变成\u0026
TCP协议之《延迟ACCEPT》
最牛最全的 Postman 实现 API 自动化测试教程
【网络迁移】Pytorch中的torch.no_grad对应MindSpore哪个方法
The same is a primary test, why does he pay 5,000 yuan more than me?
TCP协议之《QUICKACK模式》
How to quickly become a software test engineer?What skills do testers need for a monthly salary of 15k?
Qt 线程常用同步方式
软件测试这些基本类型你知道吗?
2022年起重机械指挥操作证考试题库及模拟考试
mysqldump和XBK备份
如何快速成为一名软件测试工程师?测试员月薪15k需要什么技术?









