HDU6069 Counting Divisors(区间素数筛)
来源:互联网 发布:软件著作权技术特点 编辑:程序博客网 时间:2024/06/02 06:16
#include<cstdio>#include<cstring>#include<iostream>using namespace std;/*区间素数筛法求区间[l^k,r^k]每个数质因数个数的和,mod 998244353(1<=l<=r<=1e12,r-l<=1e6,1<=k<=1e7)*/typedef long long LL;const int maxn=1e6+5;const int maxm=1e7+5;const int mod=998244353;bool is_prime[maxm];bool is_prime_small[maxm];int p;LL sum[maxn];//当前这个数因数的个数LL cnt[maxn];//区间中的每个数//区间筛法,处理的区间范围为[a,b)void segment_sieve(LL a, LL b, LL k){ for(int i=0; (LL)i*i<b; i++) is_prime_small[i]=true; for(int i=0; i<b-a; i++) is_prime[i]=true; for(int i=2; (LL)i*i<b; i++)//i是素数 { if(is_prime_small[i]) { for(int j=2*i; (LL)j*j<b; j+=i) is_prime_small[j]=false;//筛[a,sqrt(b)) LL v;//左区间 if(a%i==0) { v=a; } else { v=(a+i-1)/i*i; } for(LL j=v; j<b; j+=i) { LL ret=0; while(cnt[j-a]%i==0)//质因数分解 { ret++; cnt[j-a]/=i; } sum[j-a]=sum[j-a]*(k*ret%mod+1)%mod; } } } for(LL i=0; a+i<b; i++)//分解的数是质数 { if(cnt[i]>1) sum[i]=sum[i]*(1LL*k+1)%mod; }}int main(){ int T; LL l,r,k; scanf("%d",&T); while(T--) { scanf("%I64d%I64d%I64d",&l,&r,&k); for(LL i=0; i+l<=r; i++)//不能直接按照l,r下标存 { cnt[i]=i+l;//r-l的差较小 sum[i]=1; } segment_sieve(l,r+1,k);//处理的范围为[l,r],所以r+1 LL ans=0; for(LL i=0; i+l<=r; i++) { ans=(ans+sum[i])%mod; } printf("%I64d\n",ans); } return 0;}
阅读全文
0 0
- HDU6069 Counting Divisors(区间素数筛)
- HDU6069 Counting Divisors 区间素数筛法
- HDU6069 Counting Divisors(素数筛+二次筛)
- HDU6069-区间筛&&因子公式-Counting Divisors
- hdu6069 Counting Divisors 质因数分解 区间筛
- Counting Divisors(hdu6069)
- hdu6069 Counting Divisors(数学)
- HDU6069-Counting Divisors(约数个数定理)
- HDU6069 Counting Divisors
- hdu6069 Counting Divisors
- HDU6069 Counting Divisors【数学】
- HDU6069-Counting Divisors
- hdu6069 Counting Divisors
- hdu6069 Counting Divisors && lightoj1028
- HDU6069-Counting Divisors 约数个数定理+素数分解
- HDU 6069 Counting Divisors(枚举区间)(素数筛模版)
- Hdu6069 Counting Divisors(2017多校第4场)
- HDU6069---Counting Divisors(2017多校联赛:数学)
- 排序:插入,希尔,堆,快速,归并排序
- 纯css三角形 带边框
- featurific-for-wordpress 详细配置说明
- 图片保存问题
- 简单的混合自定义View
- HDU6069 Counting Divisors(区间素数筛)
- 一个例子让你理解c++的指针(传递动态内存)
- Unexpected error. Unable to verify database connection CDH 5.10.0
- 基本数据类型
- Hdu 5491 The Next【贪心+lowbit】
- Kotlin 学习资料
- 正则平衡组在.NET下的使用
- Maxas GEMM
- 剑指offer——5.用两个栈实现