【题目链接】http://acm.hdu.edu.cn/showproblem.php?pid=6069

题目意思

给你了l,r,k。问你i从l到r,i^k因子个数的总和

解题思路

根据约数个数定理:n=p1^a1×p2^a2×p3^a3*…*pk^ak,n的约数的个数就是(a1+1)(a2+1)(a3+1)…(ak+1).(p为质数)
若i=p1^a1×p2^a2×p3^a3*…*pk^ak,则i^K=p1^(a1*K)×p2^(a2*K)×p3^(a3*K)*…*pk^(ak*K),i^K的约数的个数就是(a1*K+1)(a2*K+1)(a3*K+1)…(ak*K+1),由此可推出质数的因子数为k+1。质数的a次方就有(a*k)+1个因子
这样只要把区间里的合数分为质数乘积就可以了。(如:12=2*2*3,他的因子数就为(2*1+1)*(1+1)=6

代码部分

///发现写的是没大佬的好把大佬的代码借用了
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=1e6+10;
const int mod=998244353;
int tot,t;
ll l,r,k,ans,cnt[maxn],q[maxn],pri[maxn];
bool vis[maxn];
void init()   ///筛选法质数打表
{for(int i=2; i<maxn; i++){if(!vis[i])pri[tot++]=i;for(int j=0; j<tot; j++){int k=i*pri[j];if(k>maxn)break;vis[k]=1;}}
}
int main()
{scanf("%d",&t);init();while(t--){scanf("%lld%lld%lld",&l,&r,&k);ans=0;if(l==1) ans++,l++;for (ll i=0; i<=r-l; i++){cnt[i]=1;   ///存对应的l+i里有多少个质数q[i]=l+i;   ///存下标}for (ll i=0; pri[i]*pri[i]<=r; i++) {ll j=l/pri[i]+(l%pri[i]!=0);   ///找到这个质数第一个出现的给定区间的倍数for (j=j*pri[i]; j<=r; j+=pri[i])  ///从区间里第一个质数倍数到最后一个{ll tmp=0;  while (q[j-l]%pri[i]==0){q[j-l]/=pri[i];  ///求可以分解多少个pre[i], tmp++;}cnt[j-l]*=(tmp*k)%mod+1;   ///tmp个pir[i]所以cnt[j-1]有(tmp*k)%mod+1个质数cnt[j-l]%=mod; }}for (ll i=0; i<=r-l; i++){if (q[i]!=1)   ///可能残留大于根号r的一个质数ans+=((k+1)*cnt[i])%mod;else ans+=cnt[i];ans%=mod;}printf("%lld\n",ans);}
}

HDU 6069 Counting Divisors相关推荐

  1. SPOJ 20713 DIVCNT2 - Counting Divisors (square)

    DIVCNT2 - Counting Divisors (square) #sub-linear #dirichlet-generating-function Let \sigma_0(n)σ​0​​ ...

  2. Counting Divisors HDU - 6069

    设n=p_1^{c_1}p_2^{c_2}...p_m^{c_m}n=p​1​c​1​​​​p​2​c​2​​​​...p​m​c​m​​​​,则d(n^k)=(kc_1+1)(kc_2+1)...( ...

  3. HDU 1264 Counting Squares (线段树-扫描线-矩形面积并)

    版权声明:欢迎关注我的博客.本文为博主[炒饭君]原创文章,未经博主同意不得转载 https://blog.csdn.net/a1061747415/article/details/25471349 P ...

  4. hdu 3887 Counting Offspring

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3887 题意:给出一棵树,对于每一个节点,问他的子孙节点中有多少个节点小于该节点. 思路:首先找出这棵树 ...

  5. HDU 3240 Counting Binary Trees 数论-卡特兰数

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3240 卡特兰数递推公式h(i)=h(i-1)*(4*i-2)/(i+1) 如果直接算每一步,然后mo ...

  6. HDU 2431 Counting Problem

    题意: 问 n * n 的格子里面放 2*n个皇后的放法数,满足每行每列的皇后数都是2. 分析: 解法可以由前面的递推到后面,知道 2 * 2 的图有一种情况后,可知大于 2 * 2 的图都可以预留 ...

  7. [Spoj]Counting Divisors (cube)

    来自FallDream的博客,未经允许,请勿转载,谢谢. 设d(x)表示x的约数个数,求$\sum_{i=1}^{n}d(i^{3})$ There are 5 Input files. - Inpu ...

  8. HDU - 6184 Counting Stars(思维+三元环)

    题目链接:点击查看 题目大意:给出一个 nnn 个点 mmm 条边组成的无向图,问图中有多少个"三元环对","三元环对"指的是两个三元环共用了一条边 题目分析: ...

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

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

  10. 【SP26073】DIVCNT1 - Counting Divisors 题解

    题目描述 定义 \(d(n)\) 为 \(n\) 的正因数的个数,比如 \(d(2) = 2, d(6) = 4\). 令 $ S_1(n) = \sum_{i=1}^n d(i) $ 给定 \(n\ ...

最新文章

  1. LeetCode实战:两数之和
  2. Python使用numpy函数vsplit垂直(行角度)拆分numpy数组(返回拆分后的numpy数组列表)实战:垂直拆分二维numpy数组、split函数垂直拆分二维numpy数组
  3. SpringBoot系列: Web应用鉴权思路
  4. idea编译项目 失败_在IntelliJ IDEA下使用Lombok时无法编译项目
  5. Activity查看数据与文本框反回数据
  6. itchat爬取朋友圈签名制作词云
  7. fprintf,sprintf,sscanf,fscanf
  8. Windows平台下 找回已丢失的MySql root 用户密码
  9. OpenCV_09 模版匹配和霍夫变换:霍夫线检测+霍夫圆检测
  10. 【李宏毅机器学习】regress case study 回归案例研究(p3) 学习笔记
  11. 【转】Windows的多线程编程,C/C++
  12. angular同源策略禁止读取_Redis5.0数据淘汰策略详解(最新版本,面试常问)
  13. java.lang.NoClassDefFoundError: com/baidu/ueditor/ActionEnter报错解决
  14. C++:以空格分隔的字符串的输入输出
  15. 动态规划和分治法解合唱队形问题
  16. 第三十三篇 transition-group 列表过渡
  17. 传统6大茶类都有哪些
  18. Tesseract(识别验证码)
  19. java优先队列 PriorityQueue详解(附图)
  20. imp oracle错误3114,imp时发生错误ORA-01114

热门文章

  1. unity3d 中添加视频
  2. 用了python之后笔记本卡了_干货!如何用Python在笔记本电脑上分析100GB数据(上)...
  3. 伽卡他卡使用教程_伽卡他卡电子教室安装使用和常见问题
  4. [NOIP2011] 观光公交解题报告
  5. 2020暑期牛客多校训练营第九场(A)Groundhog and 2-Power Representation(高精度)
  6. cpan安装软件时报错
  7. 【Python全栈测试开发实战1】搭建测试开发环境
  8. POJ 【1088】 滑雪
  9. 单片机——BH1750光照传感器篇
  10. ps 图片添加文字