ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

F. K-th Power 容斥,莫比乌斯

2022-07-28 18:06:09  阅读:94  来源: 互联网

标签:Power res ll 容斥 long 个数 因子 th 质数


F. K-th Power

传送门

牛客:https://ac.nowcoder.com/acm/contest/34866/F

cf:https://codeforces.com/group/5zHJ4CTyoU/contest/392060/problem/F

题意:求区间[l,r]中,不含有\(p^k\)因子的数字的个数。其中p是质数。

可以用容斥+莫比乌斯解决。

问题转换成求[1,r]和[1,l-1]含有\(p^k\)因子的数字的个数,然后相减。

对于求[l,r]中含有\(p^k\)因子数字的个数,设含有\(i^k\)因子的数字的个数为\(f(i)\)

则:\(ans=f(2)+f(3)+f(5)+...-f(2*3)-f(3*5)-f(2*5)...+f(2*3*5)...\)

所以对每个数统计出能由多少个不重复质数乘得,判断奇偶决定符号。如果由重复质数因子,则不是上式成员。

#include <bits/stdc++.h>
//#define ll long long
#define ll long long
const ll N = 1e7+10;
ll q_pow(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1)res=a*res;
        a=a*a;
        b>>=1;
    }
    return res;
}
ll q_sqrt(ll x,ll k){
    ll l=0,r=1e9;
    while(l<r){
        ll m=(l+r+1)>>1;
        if(q_pow(m,k)<=x){
            l=m;
        }
        else r=m-1;
    }
    return l;
}
int pr[N];
bool ck[N];
std::vector<int>ve;
void init(){
    for(int i=2;i<1e4;i++){
        ll k=i*i;
        for(ll j=k;j<N;j+=k)ck[j]=1;
    }
    for(ll i=2;i<N;i++){
        if(!pr[i]){
            ve.push_back(i);
            for(ll j=i;j<N;j+=i)pr[j]++;
        }
    }
}
ll get(ll p,ll k){
    if(k>60||p<2)return 0;
    ll m=q_sqrt(p,k);
    ll ans=0;
    for(int i=2;i<N&&q_pow(i,k)<=p;i++){   
        if(ck[i])continue;
        if(pr[i]&1)ans+=(p/q_pow(i,k));
        else ans-=(p/q_pow(i,k));   
    }    
    return ans;    
}
signed main(){
    //std::ios::sync_with_stdio(false);
    init();
    ll l,r,k;
    std::cin>>l>>r>>k;
    std::cout<<r-l+1-(get(r,k)-get(l-1,k))<<"\n";
}

标签:Power,res,ll,容斥,long,个数,因子,th,质数
来源: https://www.cnblogs.com/wtn135687/p/16529646.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有