代码拉取完成,页面将自动刷新
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;//可能会报int溢出,所以放一个long long
const int N = 1000010;
int phi[N]; //存放欧拉函数的数组
int primes[N],cnt;
bool st[N];
LL get_eulaers(int n)
{
phi[1] = 1;
//写线性筛法的模板
for(int i = 2; i <=n;i++)
{
if(!st[i])
{
primes[cnt++] = i;//如果当前这个i没有被筛选过,说明是素数,放到primes数组中
phi[i] = i-1;
}
//从小到大遍历每一个素数,用它来筛选
for(int j = 0; primes[j] <= n/i;j++)
{
st[primes[j] *i ] = true;
if(i % primes[j] == 0)
{
phi[primes[j] * i] = phi[i] * primes[j];
break;
}
phi[primes[j] * i] = phi[i]*(primes[j] - 1);
}
}
LL res = 0;
for(int i = 1; i <= n;i++) res += phi[i];
return res;
}
int main()
{
//输入
int n;
cin >> n;
//调用函数,比赛的时候,函数名直接写f都可以,保证可以Ac就好
cout <<get_eulaers(n) << endl;
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。