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


    最大质因数和(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.

  • 相关阅读:
    <摘录>如何在64位linux强制编译32位应用程序
    Ubuntu安装Java
    Mybatis学习
    Java小工具Lombok
    jenkins忘记admin密码的处理方法
    list删除元素
    ConcurrentHashMap详解
    用户登录
    SpringDemo01
    SpringBoot Eclipse 热部署
  • 原文地址:https://www.cnblogs.com/nbalive2001/p/2015600.html
Copyright © 2020-2023  润新知