UVAlive 6153 LCM Pair Sum 解题报告

这是一篇关于数论问题的解题报告,题目要求找到满足lcm(p, q) = n的所有数对(p, q)的和,其中1 <= p <= q <= n。解决方案包括考虑底数p的指数,当p的指数小于给定时,q的指数必须等于给定值,否则q的指数可任意。由于直接枚举会导致超时,所以需要优化计算方法,注意到某些情况下数对被重复计算,最后需要除以2得到正确答案。注意对于特殊数据的处理速度优化。" 110940583,5750102,操作系统详解:从结构到进程管理,"['操作系统', '进程管理', '微内核结构', '死锁处理', '调度算法', '内存管理']
摘要由CSDN通过智能技术生成

题目

题意:

对于一个数n,有一些这样的一个数对(p,q),满足1<=p<=q<=n,且lcm(p,q)=n。则f(n)等于所有的这样的数对的p和q的和。已知n(以底数和指数的形式给出),求f(n)。

题解:

考虑底数pi,对应指数ai,若p的指数小于ai,则q的指数必等于ai;若p的指数等于ai,则q的指数无所谓。通过枚举p每个底数的指数,可知q有多少种取法(可能会导致p>q,没关系)。加起来就可以。

但是直接枚举p的每一个取值会TLE。显然p的指数小于ai时q的方案数是相同的,所以可以一起算。

到最后除了(n,n)只算了一次外,每个数对都算了两次,所以加上2*n后再除2就是答案。

有些数据不预处理出乎意料地慢,要注意。


//Time:316ms
//Memory:0KB
//Length:1362B
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
#define MAXN 1010
#define MOD 1000000007

int p[MA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值