您当前的位置: 首页 > 

MangataTS

暂无认证

  • 0浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AcWing 874. 筛法求欧拉函数(欧拉函数)

MangataTS 发布时间:2022-02-12 14:57:52 ,浏览量:0

题目链接

https://www.acwing.com/problem/content/876/

思路

对于一个数x如果是质数,那么它的欧拉函数就为 x − 1 x-1 x−1,对于其他合数我们可以将其拆成最小的质数的积,那么这个过程我们就可以通过欧拉筛法来计算欧拉函数值,现在我们还有两种情况需要讨论

  • 如果i能整除prime[j]说明prime[j]是i的一个质因子,那么对于i*prime[j]来说其实就是 p h i [ i ] ∗ p r i m e [ j ] phi[i] * prime[j] phi[i]∗prime[j]
  • 如果i不能整除prime[j]说明prime[j]不是i的质因子,那么我们最后需要乘上一个 1 − 1 p r i m e [ j ] 1-\frac{1}{prime[j]} 1−prime[j]1​所以也就是 p h i [ i ] ∗ ( p r i m e [ j ] − 1 ) phi[i] * (prime[j] - 1) phi[i]∗(prime[j]−1)
代码
#include 
using namespace std;
#define ll long long

const int N = 1e6+10;

ll phi[N],prime[N];
bool vis[N];


ll cal_oular(int n){
    phi[1] = 1;
    for(int i = 2;i             
关注
打赏
1665836431
查看更多评论
0.0564s