hdu6069 Counting Divisors 晒区间素数
/**
题目: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 晒区间素数的更多相关文章
- 2017ACM暑期多校联合训练 - Team 4 1003 HDU 6069 Counting Divisors (区间素数筛选+因子数)
题目链接 Problem Description In mathematics, the function d(n) denotes the number of divisors of positiv ...
- HDU 6069 Counting Divisors(区间素数筛法)
题意:...就题面一句话 思路:比赛一看公式,就想到要用到约数个数定理 约数个数定理就是: 对于一个大于1正整数n可以分解质因数: 则n的正约数的个数就是 对于n^k其实就是每个因子的个数乘了一个K ...
- 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 ...
- 2017 Multi-University Training Contest - Team 4——HDU6069&&Counting Divisors
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6069 题目意思:首先解释一下d[n]这个函数表示n有多少个因子,百度一下可以知道这个函数是一个非完全积 ...
- HDU6069:Counting Divisors(因子数统计|区间筛)
题意 计算\(\sum_{i=l}^kd(i^k)(d_i代表i的因子数)\) 分析 比赛搞了3个小时都没搞出来,有两个思维上的trick 1.要先遍历素数,再遍历[L,R],而不是枚举每个数,然后对 ...
- 【区间筛】2017多校训练四 HDU6069 Counting Divisors
http://acm.hdu.edu.cn/showproblem.php?pid=6069 [题意] 给定l,r,k,求 d(n)是n的因子个数 [思路] [Accepted] #include&l ...
- hdu 6069 Counting divisors 公式+区间筛
比赛的时候把公式扣出来了,,但是没有想到用筛法算公因子,,默默学习一下.. 题解:设n=p1^(c1)p2^{c2}...pm^{cm},n=p1^c1*p2^c2...p ...
- 【线性筛】【质因数分解】【约数个数定理】hdu6069 Counting Divisors
d(x)表示x的约数个数,让你求(l,r<=10^12,r-l<=10^6,k<=10^7) #include<cstdio> using namespace std; ...
- hdu6069(简单数学+区间素数筛法)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6069 题意: 给出 l, r, k.求:(lambda d(i^k))mod998244353,其中 ...
随机推荐
- 使用 session_destroy() 销毁session文件时 报 Trying to destroy uninitialized session 错误解决办法
在使用 sessio_destroy() 销毁session文件的时候,必须要先使用session_start() 来开启session 后才能删除session文件
- [Angular] Improve Server Communication in Ngrx Effects with NX Data Persistence in Angular
Communicating with a remote server via HTTP presents an extra level of complexity as there is an inc ...
- 安装ADT的时候,提示“Cannot complete the install because one or more required items could not be
今天在安装ADT的时候,提示: Cannot complete the install because one or more required items could not be found. S ...
- Unity3D优化之合并网格
原文地址点击这里
- 算法笔记_116:算法集训之代码填空题集三(Java)
目录 1 数组转置 2 文件管理 3 显示为树形 4 杨辉三角系数 5 圆周率与级数 6 整数翻转 7 自行车行程 8 祖冲之割圆法 9 最大5个数 10 最大镜像子串 1 数组转置 编写程序将 ...
- LoadRunner访问 Mysql数据库
这是很久以前编写的一个测试案例,那时是为了检查大量往Mysql数据库里插入数据,看一下数据库的性能如何?服务器是否会很快就被写满了. 前期的准备工作:Mysql 数据库搭建,LoadRunner,li ...
- recess----2.Controller里面取用request信息
事实上,第一个APP里面除了没有model,其它的都有用过了,但是需要单独拎出来看看清楚. Recess框架里面的controller就是一个典型的MVC框架的controller,它负责处理从浏览器 ...
- Choose which tree,form view in many2one
<field name="partner_id" context="{'ref_form_view': 'view_id_of_my_form','ref_tree ...
- c++11 学习
#include <iostream> // std::cout #include <functional> // std::ref #include <thread&g ...
- 我的Go语言学习之旅二:入门初体验 Hello World
好吧,全部的程序猿们都已经习惯了.学习不论什么一门语言,我们都会以Hello World实例開始我们的学习,我也不例外.先来一个简单的样例 打开编辑器 (能够用记事本,我已经习惯 Notepad++了 ...