[模拟试题]最大质因数和

最大质因数和(prime)

     题目描述

         定义一个数的质因数和为它的所有质因数之和。给出n个正整数,对于每个正整数,输出2到这个数之间所有数中质因数和最大的数的质因数和。

     输入格式

         第一行一个正整数n(n<=500000),接下来n行每行有一个正整数ai(2<=ai<=1000000)。

     输出格式

         共n行,对于每一个ai输出符合题意的结果。

     样例输入

         1

         2

     样例输出

         2

解法:先生成1000000以内所有数的质因数和(利用类似筛法求素数),然后数组s中存最大的质因数和,且有递推式s[i]=max(s[i-1],a[i]),然后读入,再从s中读取

 
  
const max = 1000000 ;
var n,m,i,p,t:longint;
a,s,c:
array [ 2 ..max] of longint;
b:
array [ 2 ..max] of boolean;
begin
assign(input,
' prime.in ' );reset(input);
assign(output,
' prime.out ' );rewrite(output);
for i: = 2 to max do c[i]: = i;
// 利用筛法求素数的方法,求所有数的质因数之和
for i: = 2 to max do
if not b[i] then
begin
p:
= i;
while p <= max do
begin
b[p]:
= true;
c[p]:
= c[p] div i;
a[p]:
= a[p] + i;
p:
= p + i;
end ;
end
else
if c[i] <> 1 then
begin
p:
= i;t: = c[i];
while p <= max do
begin
c[p]:
= c[p] div t;
a[p]:
= a[p] + t;
p:
= p + i;
end ;
end ;
s[
2 ]: = a[ 2 ];
for i: = 3 to max do
if a[i] > s[i - 1 ] then s[i]: = a[i]
else s[i]: = s[i - 1 ];
readln(n);
for i: = 1 to n do
begin
readln(m);
writeln(s[m]);
end ;
close(input);close(output);
end .

转载于:https://www.cnblogs.com/nbalive2001/archive/2011/04/14/2015600.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值