/**
题目: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. 关于typedef的用法总结(zz)

    不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多 的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一 ...

  2. [Python爬虫] 之十:Selenium +phantomjs抓取活动行中会议活动

    一.介绍 本例子用Selenium +phantomjs爬取活动树(http://www.huodongshu.com/html/find_search.html?search_keyword=数字) ...

  3. URLScan参数说明

    本文分步说明如何配置 URLScan 工具以防止 Web 服务器受到攻击和利用. 修改 URLScan.ini 文件 URLScan 的所有配置都是通过 URLScan.ini 文件执行的,此文件位于 ...

  4. 【云计算】CloudFoundry参考资料

    开源PaaS平台 Cloud Foundry:http://www.oschina.net/p/cloud+foundry/ 详解CloudFoundry中各个组件的作用:http://www.cst ...

  5. minic 词法单元建立

    #include <stdio.h> #include "symbol_table_def.h" //前面的那个词法和文法说明只是大概的说明,现在又有了改动,把指针运算 ...

  6. 搭建dubbo-admin-2.5.3

    dubbo管理界面 一,安装zookeeper 1,下载包zookeeper-3.3.3.tar.gz 2,解压 tar zxvf zookeeper-3.3.3.tar.gz cd zookeepe ...

  7. COSMOSBOX手遊制作手册(Word备份)

    20140712版 版本号 Version 日期 Date 作者 Author 变更主要原因描述 Brief Description 1.0 2014-4-26 陈霈霖 初稿 2.0 1. 前言 本手 ...

  8. android上FragmentTabHost实现自己定义Tab Indicator

    近期一直在做安卓开发,发现Tab布局能够用FragmentTabHost来实现,唯一不好的就是不能实现带图标的tabindicator, V4版本号中的尽管API有支持,可是不管怎么设置Drawabl ...

  9. 12-spring学习-基本表达式

    基本表达式 一,字面表达式 二,数学表达式 三,关系表达式 四,字符串表达式 String类中所有操作方法都是开发过程中最常用的. 五,正则表达式

  10. AL2018届校招笔试——自然语言处理

    [单选40min+在线编程80min] 单选 1.以下进程的哪些行为不会导致操作系统向该进程发送一个信号?() A. 程序终止退出 B. 访问了一个非法的内存地址 C. 一个该程序正在监听的socke ...