LightOJ 1236 Pairs froming LCM 素因子分解

题意

给定一个数 n n ,问在小于等于n的数中,有多少数对(a,b)满足 lcm(a,b)=n l c m ( a , b ) = n ,其中 a<b a < b

思路

lcm=n l c m = n 的数对中的两个数一定是n的因子
我们从因子的角度来看LCM:
对n进行素因子分解
n=pa11pa22pa33...pakk n = p 1 a 1 p 2 a 2 p 3 a 3 . . . p k a k
那么它的因子 mi m i 一定也可以表示为
mi=pbi11pbi22pbi33...pbikk,0=<bik<=aik m i = p 1 b i 1 p 2 b i 2 p 3 b i 3 . . . p k b i k , 0 =< b i k <= a i k
lcm(mi,mj)=pmax(bi1,bj1)1pmax(bi2,bj2)2...pmax(bik,bjk)k l c m ( m i , m j ) = p 1 m a x ( b i 1 , b j 1 ) p 2 m a x ( b i 2 , b j 2 ) . . . p k m a x ( b i k , b j k )
lcm(mi,mj)=n l c m ( m i , m j ) = n
max(bi1,bj1)=a1,...,max(bik,bjk)=ak m a x ( b i 1 , b j 1 ) = a 1 , . . . , m a x ( b i k , b j k ) = a k
如果 bi1 b i 1 a1 a 1 ,那么 bj1 b j 1 可以取 0a1 0 − a 1 ,共有 a1+1 a 1 + 1 种取法
如果 bi1 b i 1 取小于 a1 a 1 的数,那么 bj1 b j 1 只能取 a1 a 1 ,共有 a1 a 1 种取法,所以对于第一个素因子总共有 2a1+1 2 a 1 + 1 种取法
所以对于所有的素因子来说总共有 (2ak+1) ∑ ( 2 a k + 1 ) 种取法
由于本题目中要求数对是有序的,所以最终的结果要加一除以二

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sigma函数是指一个数字的所有因子之和。给定一个数字n,需要求出有多少个数字的Sigma函数是偶数。\[2\] 为了解决这个问题,可以先筛选出n范围内的数(范围在10^6即可),然后对n进行因子分解。对于每个因子,如果它的Sigma函数中连乘的每一项都是偶数,那么整个Sigma函数就是偶数。具体实现中,可以判断每个因子的平方根是否为偶数,如果是偶数,则减去(平方根+1)/2。\[1\] 另外,还可以使用O(1)的做法来解决这个问题。根据观察,所有的完全平方数及其两倍的值都会导致Sigma函数为偶数。因此,可以直接计算n的平方根,然后减去(平方根+1)/2即可得到结果。\[3\] #### 引用[.reference_title] - *1* [Sigma Function](https://blog.csdn.net/PNAN222/article/details/50938232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【LightOJ1336】Sigma Function(数论)](https://blog.csdn.net/qq_30974369/article/details/79009498)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值