当前位置:网站首页>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;
}
边栏推荐
猜你喜欢
随机推荐
[STL]map与set
一种能让大型数据聚类快2000倍的方法,真不戳
Qt编写物联网管理平台50-超强跨平台
TCP协议之《TCP_CORK选项》
golang go get 时提示 no Go files in xxx
10个超赞的C语言开源项目,值得学习
Qt 线程常用同步方式
【mindspore产品】【8卡分布式训练】davinci_model : load task fail, return ret
原型和原型链
【MindSpore功能】运行SSD-MobileNetV1 FPN样例报错
长沙:借网红的风,铺长红的路
golang:base64编解码(转)
快35了,还在“点点点”?那些入行几年的测试点工后来都怎么样了?
Jackson的ObjectMapper在项目中的主要运用
进入Mysql数据库操作
TCP协议之《TSQ限值tcp_limit_output_bytes》
order by注入与limit注入
leetcode 283:移动零
Flutter 如何安装 pub.dev 上的 package
测试工作管理与规范