本文主要是介绍欧拉函数的求法(线性筛法?),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
include<bits/stdc++.h>
using
namespace
std;
typedef
long
long
ll;
ll phi[100001];
const
int
N=100000;
void
init()
{
for
(
int
i=1;i<=N;i++)
phi[i]=i;
for
(
int
i=2;i<=N;i++)
{
if
(i==phi[i])//判断i是不是质数(如果i不是质数那么在到达i之前phi[i]就会发生改变了)
for
(
int
j=i;j<=N;j+=i)
phi[j]=(phi[j])/i*(i-1);
}
}
int
main()
{
int
n;
init();
while
(~
scanf
(
"%d"
,&n))
{
printf
(
"%d\n"
,phi[n]);
}
}
这篇关于欧拉函数的求法(线性筛法?)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!