zoukankan      html  css  js  c++  java
  • hdu 6069 区间筛

    题意:。。一个公式

    思路:和区间筛类似POJ 2689。。。筛出L,R的每个质因数的个数即可,然后简单的组合公式,就可以算出i的k次方的约数个数

    PS。。vector乱搞会卡常。。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define MEM(a,b) memset(a,b,sizeof(a))
    #define PB push_back
    #define MP make_pair
    #define X first
    #define Y second
    #define bug puts("bug");
    typedef long long ll;
    const int maxn=1e6+10;
    const int MAXN=1000010;
    const int mo=998244353;
    ll prime[MAXN+1];
    void getPrime(){
        memset(prime,0,sizeof(prime));
        for(int i=2; i<=MAXN; i++){
            if(!prime[i])prime[++prime[0]]=i;
            for(int j=1; j<=prime[0]&&prime[j]<=MAXN/i; j++){
                prime[prime[j]*i]=1;
                if(i%prime[j]==0) break;
            }
        }
    }
    ll t,l,r,k;
    ll X[maxn],A[maxn];
    
    int main(){
        getPrime();
        scanf("%d",&t);
        while(t--){
            scanf("%lld%lld%lld",&l,&r,&k);
            for(ll i=l;i<=r;i++) X[i-l]=i,A[i-l]=1;
            ll ans=0,ret,be,p;
            for(ll i=1;prime[i]*prime[i]<=r&&i<prime[0];++i){
                be=l-l%prime[i],p=prime[i];
                if(be<l) be+=p;
                for(ll j=be;j<=r;j+=p){
                    ret=1;
                    while(X[j-l]%p==0){
                        ret=(ret+k)%mo;
                        X[j-l]/=p;
                    }
                    A[j-l]=(A[j-l]*ret)%mo;
                }
            }
            for(ll i=l;i<=r;i++) if(X[i-l]!=1) A[i-l]=(A[i-l]*(k+1))%mo;
            for(ll i=l;i<=r;i++)ans=(A[i-l]+ans)%mo;
            printf("%lld
    ",ans);
        }
        return 0;
    }



  • 相关阅读:
    web应用程序的状态管理
    web学习笔记二
    java Web 学习笔记一
    简述Bootstrap栅格布局方式
    CSS3笔记
    CSS 笔记
    初识HTML流水笔记
    数据库初识
    java流的操作
    Java 套接字使用
  • 原文地址:https://www.cnblogs.com/zhangxianlong/p/10672508.html
Copyright © 2011-2022 走看看