最大質因數和(prime)
題目描述
定義乙個數的質因數和為它的所有質因數之和。給出n個正整數,對於每個正整數,輸出2到這個數之間所有數中質因數和最大的數的質因數和。
輸入格式
第一行乙個正整數n(n<=500000),接下來n行每行有乙個正整數ai(2<=ai<=1000000)。
輸出格式
共n行,對於每乙個ai輸出符合題意的結果。
樣例輸入
樣例輸出
解法:先生成1000000以內所有數的質因數和(利用類似篩法求素數),然後陣列s中存最大的質因數和,且有遞推式s[i]=max(s[i-1],a[i]),然後讀入,再從s中讀取
constmax=
1000000
;var
n,m,i,p,t:longint;
a,s,c:
array[2
..max]
oflongint;
b:array[2
..max]
ofboolean;
begin
assign(input,
'prime.in
');reset(input);
assign(output,
'prime.out
');rewrite(output);
fori:=2
tomax
doc[i]:=i;
//利用篩法求素數的方法,求所有數的質因數之和
fori:=2
tomax
doif
notb[i]
then
beginp:=
i;while
p<=
max
dobegin
b[p]:
=true;
c[p]:
=c[p]
divi;
a[p]:
=a[p]+i;
p:=p+
i;end
;end
else
ifc[i]
<>
1then
beginp:=
i;t:
=c[i];
while
p<=
max
dobegin
c[p]:
=c[p]
divt;
a[p]:
=a[p]+t;
p:=p+
i;end
;end;s[
2]:=a[
2];fori:=3
tomax
doif
a[i]
>
s[i-1]
then
s[i]:
=a[i]
else
s[i]:
=s[i-1
];readln(n);
fori:=1
ton
dobegin
readln(m);
writeln(s[m]);
end;
close(input);close(output);
end.
試題 演算法訓練 最大質因數
問題描述 給出n個數字,求出有最大的最大質因數的那個數 輸入格式 第一行 乙個整數n。接下來的n行,每行乙個整數a i,表示給出的那n個數字。輸出格式 第一行 乙個整數,擁有最大的最大質因數的那個數。樣例輸入436 3840 42樣例輸出 38資料規模和約定 60 的資料滿足 n 100 100 的...
C 最大質因數
1.先判斷該數是否為質數,若為質數直接輸出。2.依次判斷x 從2開始的數 是否為該數 n 的因數 3.若是因數,判斷該數是否為質數,若為質數記錄該數。若n x的結果也為質數,則此質數即為最大質因數。ps 不可以將該數的所有質因數列出 會存在超時!include using namespace std...
質因數分解(C )(求最小質因數反求最大質因數)
p1075 質因數分解 題目描述 已知正整數nn是兩個不同的質數的乘積,試求出兩者中較大的那個質數。輸入格式 乙個正整數nn。輸出格式 乙個正整數pp,即較大的那個質數。輸入輸出樣例 輸入 21 輸出 7 說明 提示 n 2 10 9 noip 2012 普及組 第一題 直接找最大質因數會超時,所以...