完全平方数(数论)

在1到N的范围内寻找数的乘积构成的最大完全平方数。要求选取的数质因数分解后每种质因数个数为偶数,通过统计质因数的个数来解决此问题。给定数据范围1≤N≤5×10^6,并对结果取模100000007。
摘要由CSDN通过智能技术生成

完全平方数

题目概述:

从1−N中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数最大可能是多少(答案取模100000007)
(数据说明:对于20%的数据,1≤N≤100.对于50%的数据.1≤N≤5000.对于70%的数据,1≤N≤10^5.对于100%的数据,1≤N≤5×10^6.)

题目分析:

首先考虑什么是合法解——完全平方数,那么对其进行质因数分解之后得到的每种质因数的个数应当是偶数个.那么,只要保证选取的数质因数分解后每种个数为偶数个,就能满足完全平方数要求.那么问题就转换到求解1~N的任意质因数个数(对于个数为偶数的质数直接取完,个数为奇数的质数去掉该质数本身即可),如何快速求1~N的某一质因数个数.首先可以考虑这样一个问题:如何统计1~N的所有因数个数,实际上可以发现1的因数个数=N/1,2的因数个数=N/2…那么则有如下式子:

那么这个问题就便于解决了,举个例子,如求1~81的3的个数是多少,可以发现ans=81/3+27/3+9/3+3/3=40,那么就可以得到如下式子(好吧,我不会推导式子(逃)):

代码:

#include<cstdio>
#include<iostre
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值