HDU 6069 求区间[L,R]每个数的k次方的因子数之和

计算整数因子 计算整数因子题目正文输入输出样例代码总结 题目正文 输入一个整数,输出其所有质因子。 输入 输入只有一行,包含一个整数n。 输出 输出一行,包含若干个整数,为n的所有质因子,按照从小到大的顺序排列。 样例 6 2 3 代码 #include<iostream> #include<stdio.h> using namespace std; int IsPrime(int n) { int m=1; for(int i=2;i<n;i++) { if(n%i 阅读详情


缺乏知识点     

1.约数定理: num=p1^c1 * p2^c2 * ....* pn^cn    p代表素数   c代表对应幂次

                num对应的因子数= (c1+1)*(c2+1)*......*(cn+1)

2.一个数num   大于sqrt(num)的素因子    数量  只能 为0或者1 


可以解决的问题:

1.所有求一个数num的因子数时 只需要枚举<=sqrt(num)的素数,num除掉所有<=sqrt(num)的素数时,num!=1就说明存在一个> sqrt(num) 的素数 ,之后套约数定理算就可以了

2.如果求一个数num^k的因子数,方法同1一样,只不过套公式的时候 num^k=p1^(k*c1)  *  p2^(k*c2 )   * ....*   pn^(k*cn )

3.如果求一个区间的因子数,先把sqrt(区间上限)  的素数表打出来  ,枚举素数,再倍增枚举素数对应区间的数,然后就和上面的操作一样了。


此题官方题解

1003. Counting Divisors

设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)...(kc_m+1)d(n​k​​)=(kc​1​​+1)(kc​2​​+1)...(kc​m​​+1)。

枚举不超过\sqrt{r}√​r​​​的所有质数pp,再枚举区间[l,r][l,r]中所有pp的倍数,将其分解质因数,最后剩下的部分就是超过\sqrt{r}√​r​​​的质数,只可能是00个或11个。

时间复杂度O(\sqrt{r}+(r-l+1)\log\log(r-l+1))O(√​r​​​+(r−l+1)loglog(r−l+1))。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <algorithm>  
#include <iostream>  
#include <cstdlib>  
#include <cstring>  
#include <string>
#include <cstdio>  
#include <climits>
#include <cmath> 
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <map>
#include <sstream>
#define INF 0x3f3f3f3f
#define LL long long
#define fora(i,a,n) for(int i=a;i<=n;i++)
#define fors(i,n,a) for(int i=n;i>=a;i--)
#define sci(x) scanf("%d",&x)
#define scl(x) scanf("%lld",&x)
const int MAXN=1000024;
const long long MOD=998244353;
const double eps = 1e-8;
using namespace std;
int t;
LL l,r,k;
bool npm[MAXN];
LL pm[MAXN],z=0;
LL Num[MAXN],f[MAXN];
void reset(){
    fill(Num,Num+MAXN,1);
}
int main() {
#ifdef local
    freopen("ini.txt", "r", stdin);
    //freopen("out.txt","w",stdout);
#endif
    npm[0]=npm[1]=1;
    for(int i=2;i<=1000000/2;i++)
        if(npm[i]==0){
            for(int j=i+i;j<=1000000;j+=i){
                npm[j]=1;
            }
            pm[z++]=i;
        }
    
    sci(t);
    while(t--){
        reset();
        scanf("%lld%lld%lld",&l,&r,&k);
        for(int i=0;i+l<=r;i++) f[i]=i+l;

        LL s;
        LL sum=0,num=0;
        for(int i=0;i<z;i++){
            if(l%pm[i]) s=(pm[i]-l%pm[i])+l;
            else s=l;    
            for(;s<=r;s+=pm[i]){
                num=0;
                while(f[s-l]%pm[i]==0) f[s-l]/=pm[i],num++;
                Num[s-l]=(Num[s-l]*(num*k%MOD+1))%MOD;
            }
        }
        
        for(int i=0;i<=r-l;i++)
            if(f[i]==1) sum=(sum+Num[i])%MOD;
            else sum=(sum+Num[i]*(k+1)%MOD)%MOD;
        printf("%lld\n",sum);
    }

    return 0;
}


RK356x U-Boot研究所(命令篇)3.7 pci与nvme命令的用法 阅读详情

相关推荐

MIMO技术入门

MIMO:多天线技术,发射端和接收端有多个天线(注意:并不是指多个天线板,而是多套振子,每一套是一个独立的天线。) 4G:2、8天线 5G:4、64天线(64T64R) 手机也是多天线 MIMO实现效果的分类: 1)空间分集 。2)空间复用。3)波束赋形。 空间分集(space diversity) 作用:提升接收质量 利用多个天线发射或者接收一个数据流,避免单个信道衰落对整个链路的影响。(比如你的耳机坏了一只并不影响另一只) 空间复用(space multiplexing) 作用:提升速率 利

About1129的博客 2876

【HDU 5828】Rikka with Sequence(线段树维护区间开方,修改,求和)

首先我们知道一个数开7 8次方过后就歇逼了 那我们是否可以维护一个区间的flag标记 表示是否一个区间里的数都是一样的 那开根就到这儿就行了(似乎在口胡?) 然后我们看一组数据 2 3 2 3 2 3 然后整体加6然后开根号,又会变回2 3 2 3 2 3 相当于不会出现区间数字一样的情况了,这样就相当于没剪枝,就T了 然后发现只有极差为1的时候才会出现这种情况,极差>1的话是不可...

Android66666的博客 254

秦时明月6.2魔改版_从零到一部署指南_含安卓客户端配置与GM后台直通

本文详细介绍了秦时明月6.2魔改版的从零到一部署指南,包括环境准备、服务端安装、安卓客户端配置以及GM后台直通等关键步骤。特别针对安卓客户端配置和GM工具使用提供了实用技巧,帮助用户快速搭建并优化游戏服务器,确保稳定运行。

weixin_42522964的博客 315

数据结构:线段树——求区间N次方和

/* 将某区间每一个数乘上 x 将某区间每一个数加上 x 求出某区间每一个数的和 假设区间一次方和为Sum1 现在要求区间二次方和和三次方...n次方和 设区间一次方和Sum1 = a+b+c+d+... 则区间二次方和为Sum2 = a^2+b^2+c^2+d^2+... 区间每个值增加x后:Sum2=(a+x)^2+(b+x)^2+(c+x)^2+... = (a^2+b^2+c^2+...) + (2*(a+b+c...)*x) + 2*n*(x)^2 =Sum2 + 2*S

qq_43597227的博客 785

别再为PT100测温发愁了!手把手教你用ADS1247+STM32搞定高精度温度采集(附完整源码)

本文详细介绍了如何利用ADS1247高精度ADC与STM32微控制器构建PT100测温系统,实现±0.1℃的温度测量精度。内容涵盖硬件设计、寄存器配置、SPI通信优化及温度换算算法,特别适合工业自动化和精密仪器领域的嵌入式开发人员参考。

weixin_26897585的博客 428

Mac上VMware Fusion手动安装VMware Tools实现跨系统复制粘贴

本文详细指导了在Mac的VMware Fusion中手动安装VMware Tools的完整流程,以解决虚拟机与宿主机之间无法复制粘贴的常见问题。通过定位安装镜像、挂载、解压并运行安装脚本,最终实现跨系统无缝数据交换,提升工作效率。

orange的博客 698

k次方幂的和

快速求出1到n的k次方和 1k+2k+3k+...+nk=???1k+2k+3k+...+nk=???1^k+2^k+3^k +...+n^k=??? 有没有什么快速的方法能够推导出上面的公式呢?? 大家都知道(反正我之前只知道前三个): 1+2+3+...+n=12(n+1)n1+2+3+...+n=12(n+1)n1+2+3+...+n=\frac12(n+1)n 12+22+3...

nan 5285

Halcon窗体开发避坑指南:C#自定义控件实现7大图像交互功能

本文详细介绍了如何利用C#封装自定义Halcon控件,以解决原生HWindowControl功能不足的问题。通过实战代码,展示了如何实现图像按比例显示、鼠标拖动缩放、灰度值读取、图像保存、截图及图形叠加等七大核心交互功能,并重点剖析了内存管理、坐标转换等开发避坑要点,帮助开发者构建稳定可复用的机器视觉组件库。

weixin_29251131的博客 292

ODT(old driver tree)详解(带例题)

文章目录ODT简介实现前提&&实现原理初始化split操作assign操作其它操作区间第k小区间加区间所有数的k次方和几道水题 ODT简介 ODT(old driver tree 老驱动树)又名珂朵莉树是由codeforcescodeforcescodeforces上一位叫做ODTODTODT的用户提出的一种基于平衡树的暴力数据结构。...

weixin_30631587的博客 784

学Simulink——基于软开关与高频变换的整流器系统场景实例:移相全桥ZVS整流器在轻载条件下的效率优化

本文以Simulink为平台,详细介绍了移相全桥ZVS整流器在轻载条件下的建模与优化方法。通过六个步骤系统讲解了从项目创建到仿真运行的全过程,重点分析了移相全桥拓扑结构、ZVS检测逻辑设计及轻载特性。结果显示,传统移相全桥在轻载时ZVS失效导致效率下降(<88%)。针对此问题,提出了动态频率调整、不对称半桥模式等优化策略。该案例为理解软开关技术、提升电源效率提供了实用建模方法和优化思路。

xiaoheshang_123的博客 117

【SpringBoot 3.x 第51节】带你玩转 GraalVM Native Image:启动快到飞起,内存省到心疼,你还不试试?

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1304

【HDU6069】区间素数筛+因子个数

1.题目链接。问题很简洁,就是求一下区间[l,r]里的每一个i,i的k次方因子个数之和。 首先我们知道d(i)=(a1+1)*(a2+1)...(ak+1),其中a1,a2...ak是对i进行素因子分解之后每个素因子的指数。这个结论很好证明,就简单的排列组合一下就好。那么对于:i^k.唯一的变化就是素因子分解之后ai变成了ai*k.那么式子形式还是不变的:d(i^k)=(a1*k+1)......

YG爱木木 397

计算机视觉教程2-3:图解双线性插值算法&最近邻插值算法

提出此算法的背景是基于图片的缩放,在图片缩放的过程中,实质上就是将原图像像素矩阵像素值,填到目标图像像素矩阵中,目标图像像素矩阵可能比原图像像素矩阵大(图片放大),也可能小(图片缩小)。我们假设图片的宽(WidthWidthWidth)和高(HeightHeightHeight)是按同比例缩放的,那么 srcXsrcWidth=dstXdstWidth\frac{srcX}{srcWidth}= \frac{dstX}{dstWidth}srcWidthsrcX​=dstWidthdstX​ ...

FRIGIDWINTER的博客 7283

HDU 6069 Counting Divisors (素因子求贡献)

HDU 6069 Counting Divisors (素因子求贡献) 数论 素数 素分解 贡献 HDU 2017多校赛 Description给定l​l​,r​r​和k​k​,计算以下表达式的值。 ∑i=lrd(ik)mod998244535 \sum_{i=l}^{r}{d(i^k)} \mod 998244535 其中d(n)d(n)为nn的正因子数量。Input第一行给出用例组数T

达达Mr_X 615

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

hdu 6069 区间筛

题意:。。一个公式 思路:和区间筛类似POJ 2689。。。筛出L,R的每个质因数的个数即可,然后简单的组合公式,就可以算出i的k次方的约数个数 PS。。vector乱搞会卡常。。 代码: #include using namespace std; #define MEM(a,b) memset(a,b,sizeof(a)) #define PB push_back #de

zxl博客 832

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

HDU6069:Counting Divisors(因子数统计|区间筛)

题意 计算\(\sum_{i=l}^kd(i^k)(d_i代表i的因子数)\) 分析 比赛搞了3个小时都没搞出来,有两个思维上的trick 1.要先遍历素数,再遍历[L,R],而不是枚举每个数,然后对每个数进行质因数分解 2.比赛的时候我有想过枚举素数,但是忘记因子计算公式可以分开相乘,而不用一次性求粗来,导致我们队的崩盘,我要背锅!!! 具体的做法:枚举每个素数,并枚举[L,R]中的素...

anquan1533的博客 137

HDU 6069 数学题,区间素数筛

Counting Divisors Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 691    Accepted Submission(s): 227 Problem Description In math

LinzhiQQQ的博客 426

[HDU]6069 Counting Divisors

URL : http://acm.hdu.edu.cn/showproblem.php?pid=6069求: (∑i=lrd(ik))mod998244353\begin{eqnarray*} \left(\sum_{i=l}^r d(i^k)\right)\bmod 998244353 \end{eqnarray*} l,r,k(1≤l≤r≤1012,r−l≤106,1≤k≤107)l,r,k

chutzpah 1820

hdu6069 Counting Divisors(数学)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6069题意:设d(xk)为求xk的因数的个数,如12的因数有1,2,3,4,6,12共6个,d(12)=6,题目求∑i=lrd(ik)设d(x^k)为求x^k的因数的个数,如12的因数有1,2,3,4,6,12共6个,d(12)=6,题目求\sum_{i=l}^r d(i^k)官方题解:设n=pc11pc

酱油拌面 819

HDU 6069 Counting Divisors

题目描述HDU 6069 Counting Divisors分析设 i=pr11pr22…prkki = p_1^{r_1}p_2^{r_2}\dots p_k^{r_k},则 d(i)=∏ki=1(ri+1)d(i)=\prod_{i=1}^k(r_i+1),因此我们有d(ik)=∏ki=1(ri∗k+1)d(i^k)=\prod_{i=1}^k(r_i*k+1),显然用区间筛法,可以做到在 O(

taotao 的大学墓志 585

HDU_6069 Counting Divisors

题目链接题目意思给你三个数L,R,K让你求满足下面公式的答案 解题思路由题意我们可以知道L,R最大为1e12,所以我们可以用筛法筛选sqrt(1e12)之内的所有素数。 有数论中的结论我们知道,任何一个正整数x,都可以分解成若干个素数幂的积。 则 x = (p1^m1)* (p2^m2)* (p3^m3)* …..* (pn^mn); 其中p1,p2,p3…pn都是素数,m1,m2,m3

长颜草的博客 347

hdu6069(大区间素数)

Counting Divisors Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 3713    Accepted Submission(s): 1366 Problem Description In ma

yypurpose的博客 616

hdu6069Counting Divisors(约数个数定理)

题意: 给你l,r,k三个整数,求区间[l,r]内每个数 的k次方的因子总数。 思路: 枚举根号r内的质数,求出每个质数在区间内贡献值,利用约数个数定理求因子总数,注意处理区间内大于根号r的质数。 代码: #include #include #include using namespace std; typedef long long LL; const int mod = 99

exp1ore的博客 346

区间素数筛法

有时候会求在大区间[L,R]内的素数个数,但是一般R-L不会很大,因此可以求[1,√R]中的素数来筛[L,R]中的素数。用求出的素数来筛[L,R]中的合数。因为L,R过大,开出的数组大小一般为最大的R-L。 例题①:https://vjudge.net/problem/POJ-2689 注意:1不为素数的情况。 #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> usin

TK_wang_的博客 723

Counting Divisors HDU - 6069

In mathematics, the functiond(n)d(n)denotes the number of divisors of positive integernn. For example,d(12)=6d(12)=6because1,2,3,4,6,121,2,3,4,6,12are all1212's divisors. In this problem, gi...

GJLfly的博客 406

Hdu 6069 Counting Divisors【素数区间筛+预处理素因子分解】

Counting Divisors Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 3150    Accepted Submission(s): 1175 Problem Description In mathem

mengxiang000000 489

hdu6069 区间筛

思路:和区间筛类似POJ 2689。。。筛出L,R的每个质因数的个数即可,然后简单的组合公式,就可以算出i的k次方的约数个数

c_czl的博客 174
上一篇: 同余最短路
下一篇: 关于欧拉函数的一些理解
DIDCJS
博客等级 码龄11年 5粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值