【Link】:http://acm.hdu.edu.cn/showproblem.php?pid=6069

【Description】



定义d(i)为数字i的因子个数;

求∑rld(ik)

其中l,r<=1012且r−l<=106

【Solution】



如果把一个数x质因数分解成p1a1∗p2a2∗...∗pnan

的形式;

可知数字x的因子个数为

(a1+1)∗(a2+1)∗...∗(an+1)

因为i还有k次方;

所以答案就是

(a1∗k+1)∗(a2∗k+1)∗...∗(an∗k+1)

需要对l..r里面所有的数字都进行质因数分解;

可以这样

先处理出2..r√之间的所有素数;

然后枚举每个素数i它在l..r之间的倍数x;

则对x 用素数i进行质因数分解,也即一直除它;

这样,就能算出来x在质因数分解的时候,素数i最后的指数是多少了;

(累乘数字x的答案就好);

记录x在进行质因数分解的时候被除剩下的数字,除的时候是用

这个记录的数字除;

最后这个数字可能会不变;

因为它本身可能就是一个素数;

所以小于r√的素数可能不是它的因子;

但是不可能还有大于r√的因子;

所以如果除剩下的数字还大于0;

答案再乘上(k+1)就好;

最后把每个数字它的答案累加起来;

(一开始可以用O(n)的素数筛求出1..n之间的所有素数);



【NumberOf WA】



many times



【Reviw】



一开始一直往O(n14)的质因数分解想了;

没想到这种方法.

判断出某个素数是某个数的因子之后,不要再记录它的因子是什么了;

直接就开始质因数分解,这样比较快;

不然会超时.



【Code】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define ri(x) scanf("%d",&x)
#define rl(x) scanf("%lld",&x)
#define rs(x) scanf("%s",x+1)
#define oi(x) printf("%d",x)
#define ol(x) printf("%lld",x)
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 1e6;
const LL MOD = 998244353; bool iszs[N+100];
vector <int> zsb;
LL num[N+100],ans[N+100]; int main(){
//Open();
//Close();
ms(iszs,true);
rep1(i,2,N)
{
if (iszs[i]) zsb.pb(i);
int len = zsb.size();
rep1(j,0,len-1)
{
int t = zsb[j];
if (i*t>N) break;
iszs[i*t] = false;
if (i%t==0) break;
}
} int T;
ri(T);
while (T--){
LL l,r,k;
rl(l),rl(r),rl(k);
for (LL i = l;i <= r;i++)
num[i-l+1] = i,ans[i-l+1] = 1; rep1(i,0,(int) zsb.size()-1){
LL x = zsb[i];
if (x > r) break;
LL temp = ((l-1)/x + 1)*x;
for (LL i = temp;i <= r;i+=x){
LL tot = i,cnt = 0;
while (tot%x==0){
tot/=x;
num[i-l+1]/=x;
cnt++;
}
ans[i-l+1] = ans[i-l+1]*(cnt*k+1)%MOD;
}
} LL fans = 0; for (LL i = l;i <= r;i++){
if (num[i-l+1]!=1){
fans = (fans + ans[i-l+1]*(k+1)%MOD)%MOD;
}else
fans = (fans + ans[i-l+1])%MOD;
}
ol(fans);puts("");
}
return 0;
}

【2017 Multi-University Training Contest - Team 4】Counting Divisors的更多相关文章

  1. 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 ...

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

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

  3. 【2017 Multi-University Training Contest - Team 2】TrickGCD

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6053 [Description] 给你一个b数组,让你求一个a数组: 要求,该数组的每一位都小于等 ...

  4. 【2017 Multi-University Training Contest - Team 2】Maximum Sequence

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6047 [Description] 给你一个数列a和一个数列b; 只告诉你a的前n项各是什么; 然后 ...

  5. 【2017 Multi-University Training Contest - Team 2】 Regular polygon

    [Link]: [Description] 给你n个点整数点; 问你这n个点,能够组成多少个正多边形 [Solution] 整点只能构成正四边形. 则先把所有的边预处理出来; 枚举每某两条边为对角线的 ...

  6. 【2017 Multi-University Training Contest - Team 2】 Is Derek lying?

    [Link]: [Description] 两个人都做了完全一样的n道选择题,每道题都只有'A','B','C' 三个选项,,每道题答对的话得1分,答错不得分也不扣分,告诉你两个人全部n道题各自选的是 ...

  7. 【2017 Multi-University Training Contest - Team 5】Rikka with Competition

    [Link]: [Description] [Solution] 把所有人的能力从大到小排; 能力最大的肯定可能拿冠军; 然后一个一个地往后扫描; 一旦出现a[i-1]-a[i]>k; 则说明从 ...

  8. 【2017 Multi-University Training Contest - Team 5】Rikka with Subset

    [Link]: [Description] 给你a数组的n个数的所有2^n个子集的2^n个子集元素的和; 子集元素的和最大为m; 告诉你各个子集元素的和出现的次数; 如 1 2 则0出现1次,1出现1 ...

  9. 【2017 Multi-University Training Contest - Team 5】Rikka with Graph

    [Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6090 [Description] 给你n个点; 让你在这n个点上最多连m条无向边; 使得 ∑ni= ...

随机推荐

  1. git新克隆代码的时候ssh协议

  2. 通过.ENV文件来配置ThinkPHP的数据库连接信息

    在ThinkPHP系统根目录创建.env文件,注意WINDOWS无法直接右键创建,使用编辑器保存时设置文件名为.env就可以创建文件.内容如下: .evn文件内容如下: [database] host ...

  3. CF37E Trial for Chief(最短路)

    题意 题意是给你一张 NMNMNM 的图,每个点有黑色和白色,初始全为白色,每次可以把一个相同颜色的连续区域染色,求最少的染色次数:(n,m<=50) 题解 转化为最短路.对于每一个点与它相邻的 ...

  4. MySQL auttoReconnect

    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from ...

  5. 在VPS上用Outline Manager 建立*** 增强版服务器

    在VPS上用Outline Manager 建立*** 增强版服务器 原文 https://free.com.tw/google-outline/ Outline 是Google Jigsaw的一款开 ...

  6. VS链接数据库

    可以用VS链接数据库,并进行数据库操作.前提是安装了Sqlserver,活着连接线上的数据库服务器.

  7. 3.AngularJS-过滤器

    转自:https://www.cnblogs.com/best/p/6225621.html 二.过滤器 使用过滤器格式化数据,变换数据格式,在模板中使用一个插值变量.语法格式如下: {{ expre ...

  8. 系统管理员的 SELinux 指南:这个大问题的 42 个答案

    安全.坚固.遵从性.策略是末世中系统管理员的四骑士.除了我们的日常任务之外 —— 监控.备份.实施.调优.更新等等 —— 我们还需要负责我们的系统安全.即使这些系统是第三方提供商告诉我们该禁用增强安全 ...

  9. jQuery中四种事件监听的区别

    原文链接:点我 我们知道jquery提供了四种事件监听方式,分别是bind.live.delegate.on,下面就分别对这四种事件监听方式分析. 已知有4个列表元素: 列表元素1 列表元素2 列表元 ...

  10. 【Linux下禁用rm命令之建立回收站】

    第一步 创建回收站目录 # 根据自己的习惯,找个位置创建一个用作回收文件的目录 # 我们这里将在root目录下面创建一个名为".trash"的隐藏文件 [root@fedora ~ ...