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,其中 ...
随机推荐
- http://my.oschina.net/u/1177710/blog/284608
http://my.oschina.net/u/1177710/blog/284608 http://chuhanzhi.com/?p=45 http://www.2cto.com/kf/201501 ...
- hue启用ldap
[desktop] [[auth]] …… …… backend=desktop.auth.backend.LdapBackend .….. http://gethue.com/ldap-or-pam ...
- 1069: [SCOI2007]最大土地面积|旋转卡壳
旋转卡壳就是先求出凸包.然后在凸包上枚举四边形的对角线两側分别找面积最大的三角形 因为在两側找面积最大的三角形的顶点是单调的所以复杂度就是n2 单调的这个性质能够自行绘图感受一下,似乎比較显然 #in ...
- 初始化linux环境
初始化linux环境 1. 新建用户组 addgroup admin //假定为admin用户组 2. 新建用户 useradd -d /home/work -s /bin/bash -m work ...
- IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token
本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...
- 探寻C++最快的读取文件的方案
https://www.byvoid.com/blog/fast-readfile/ 在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式.相信几乎所有的C++学习者都在cin ...
- toFixed 不能四舍五入问题
最近在项目中遇见一个bug,数据在移动端与pc端不一致,金额少了0.01,原因是js在处理0.005的时候直接舍去了千分位,直接上解决方法 Number.prototype.toFixed = fun ...
- 【转】spring MVC入门示例(hello world demo)
部分内容来自网络:<第二章 Spring MVC入门 —— 跟开涛学SpringMVC > 1. Spring MVC介绍 Spring Web MVC是一种基于Java的实现了Web M ...
- 一直加载“fonts.googleapis.com”的解决办法
原文:http://www.tuicool.com/articles/6bayeq 最近国内对google又开始了新一轮的屏蔽,很多wordpress用户发现一个现象,那就是网站前台和后台打开都非常慢 ...
- JavaScript入门:002—JS代码放置的位置
JavaScript在页面中使用,那么这些JS代码应该放在什么位置呢?以下来看一下. 一般来说有两种方式.写在界面上和使用.js文件.1.1界面上的Head部分能够直接放在head标签内,例如以下代码 ...