/**
题目:hdu6069 Counting Divisors
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6069
题意:求[l,r]内所有数的k次方的约数个数之和。 思路:
用(1+e1)*(1+e2)*...*(1+en)的公式计算约数个数。
素数筛出[l,r]内的素因子,然后直接计算结果。(一开始我用vector存起来,之后再处理,结果超时,
时间卡的很紧的时候,vector也会很占用时间。) */
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
using namespace std;
typedef pair<int,int> P;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const int mod = ;
const int maxn = 1e6+;
bool is_prime_small[maxn];
vector<int> v[maxn];
int prime[maxn], z;
LL value[maxn], cnt[maxn];
void init()
{
for(int i = ; i<=; i++) is_prime_small[i] = true;
z = ;
for(int i = ; i<=; i++){
if(is_prime_small[i]){
z++;
prime[z] = i;
}
for(int j = ; j <= z; j++){
if((LL)i*prime[j]>=){
break;
}
is_prime_small[i*prime[j]] = false;
if(i%prime[j]==) break;
}
}
}
void segment_sieve(LL a,LL b,LL k) //[a,b)
{ for(int i = ; i < b-a; i++) value[i] = i+a, cnt[i] = ;
int num;
for(int i = ; (LL)prime[i]*prime[i]<b&&i<=z; i++){
for(LL j = max((LL)prime[i],(a+prime[i]-)/prime[i])*prime[i]; j < b; j+=prime[i]){
num = ;
while(value[j-a]%prime[i]==){
num++; value[j-a]/=prime[i];
}
cnt[j-a] = cnt[j-a]*(num*k+)%mod;
}
}
}
LL solve(LL a,LL b,LL k)
{ LL ans = ;
for(int i = ; i < b-a; i++){
if(value[i]>){
cnt[i] = cnt[i] * (k+) % mod;
}
ans = (ans + cnt[i])%mod;
} return ans;
}
int main()
{
int T;
cin>>T;
init();
LL l, r, k;
while(T--){
scanf("%lld%lld%lld",&l,&r,&k);
if(l==r&&l==){
printf("1\n"); continue;
}
int flag = ;
if(l==){
l++;
flag = ;
}
segment_sieve(l,r+,k);
printf("%lld\n",(solve(l,r+,k)+flag)%mod);
}
return ;
}

hdu6069 Counting Divisors 晒区间素数的更多相关文章

  1. 2017ACM暑期多校联合训练 - Team 4 1003 HDU 6069 Counting Divisors (区间素数筛选+因子数)

    题目链接 Problem Description In mathematics, the function d(n) denotes the number of divisors of positiv ...

  2. HDU 6069 Counting Divisors(区间素数筛法)

    题意:...就题面一句话 思路:比赛一看公式,就想到要用到约数个数定理 约数个数定理就是: 对于一个大于1正整数n可以分解质因数: 则n的正约数的个数就是 对于n^k其实就是每个因子的个数乘了一个K ...

  3. 2017 Multi-University Training Contest - Team 4 hdu6069 Counting Divisors

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6069 题目: Counting Divisors Time Limit: 10000/5000 ...

  4. 2017 Multi-University Training Contest - Team 4——HDU6069&&Counting Divisors

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6069 题目意思:首先解释一下d[n]这个函数表示n有多少个因子,百度一下可以知道这个函数是一个非完全积 ...

  5. HDU6069:Counting Divisors(因子数统计|区间筛)

    题意 计算\(\sum_{i=l}^kd(i^k)(d_i代表i的因子数)\) 分析 比赛搞了3个小时都没搞出来,有两个思维上的trick 1.要先遍历素数,再遍历[L,R],而不是枚举每个数,然后对 ...

  6. 【区间筛】2017多校训练四 HDU6069 Counting Divisors

    http://acm.hdu.edu.cn/showproblem.php?pid=6069 [题意] 给定l,r,k,求 d(n)是n的因子个数 [思路] [Accepted] #include&l ...

  7. hdu 6069 Counting divisors 公式+区间筛

    比赛的时候把公式扣出来了,,但是没有想到用筛法算公因子,,默默学习一下.. 题解:设n=p1^(c1)p2^{c2}...pm^{cm},n=p​1^​c​1*​​​​p​2​^c​2​​​​...p ...

  8. 【线性筛】【质因数分解】【约数个数定理】hdu6069 Counting Divisors

    d(x)表示x的约数个数,让你求(l,r<=10^12,r-l<=10^6,k<=10^7) #include<cstdio> using namespace std; ...

  9. hdu6069(简单数学+区间素数筛法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6069 题意: 给出 l, r, k.求:(lambda d(i^k))mod998244353,其中 ...

随机推荐

  1. RocketMQ通信协议

    我们先从client端看一个消息是如何发送到服务端,服务端又是如何解析消息的. client端: 构造请求体: 构造请求体: 发送消息体: 下面看服务端: rocketmq的协议服务端解析救灾这里了R ...

  2. Cannot call sendError() after the response has been committed(filter问题)

    就是因为执行了filter的dofilter方法中 chain.doFilter(request,response)了 执行了两遍 if(){}else{chain.doFilter(request, ...

  3. [ES6] 08. Destructuring Assignment -- 1

    Here is the way you get value from an object: var obj = { color: "blue" } console.log(obj. ...

  4. Groovy(java)+Spock+IDEA+maven+Jenkins+SVN+maven-surefire-plugin+maven-surefire-report-plugin/maven-antrun-extended-plugin集成接口测试框架

    文章为原创,未经本人授权禁止转载. 一.spock框架环境搭建. 二.基于spock框架的脚本开发. 三.基于spock框架的用例执行并生成HTML报告. 四.集成jenkins生成HTML报告. 五 ...

  5. 有关﹤![CDATA[ ]]> 说明

    CDATA DTD中的属性类型 全名:character data 在标记CDATA下,所有的标记.实体引用都被忽略,而被XML处理程序一视同仁地当做字符数据看待, CDATA的形式如下: <! ...

  6. Linux下Wi-Fi配置工具2

    上回说到,linux下面的Wi-Fi配置工具,说是江湖多事,风起云涌...嗯,这回是真的要动手配置了.各种麻烦啊,想死的心都有了有木有啊. 尝试用iwconfig 话说上回说用iwconfig配置Wi ...

  7. 百度URL參数解析

    百度URL參数解析 在用Python爬取百度搜索的内容时,发现百度搜索的url非常的长.往往会跟一大段的參数,但事实上非常多參数都是没有必要的,如相同是搜索javakeyword,能够通过 http: ...

  8. STL源码剖析(heap)

    STL heap并不是容器,而是一系列的算法. 这些算法接受RandomAccessIterator[start, end),并将其表述成一棵完全二叉树. 关于heap算法可以参考之前算法导论的一篇博 ...

  9. git 教程一

    git 是一个开源的分布式版本控件系统,用于敏捷高效地处理任何或小或大的项目. Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件. Git 与常用 ...

  10. centos 基础环境配置

    1,安装EPEL的yum源 EPEL 是 Extra Packages for Enterprise Linux 的缩写(EPEL),是用于 Fedora-based Red Hat Enterpri ...