time limits: 2000 ms memory limits: 524288 kb detailed limits downloads
description
乙個合數的真因數是指這個數不包括其本身的所有因數,例如6 的正因數有
1; 2; 3; 6,其中真因數有1; 2; 3。乙個合數的最大真因數則是這個數的所有真因數中最大
的乙個,例如6 的最大真因數為3。
給定正整數l 和r,請你求出l 和r 之間(包括l 和r)所有合數的最大真因數之和。
input
從檔案factor.in 中讀入資料。
輸入共一行,包含兩個正整數l 和r。保證l<=r。
output
輸出到檔案factor.out 中。
輸出共一行,包含乙個整數,表示[l; r] 內所有合數的最大真因數之和。
sample input
1 10
101 1000
180208 975313
339762200 340762189
2500000000 5000000000
sample output
17 163446
151642139152
112318862921546
3094668961678105770
data constraint
l,r<=5*10^9
hint
【樣例1 解釋】
在1 至10 之間的合數有4; 6; 8; 9; 10,它們的最大真因數分別為2; 3; 4; 3; 5,因此最
大真因數之和為2 + 3 + 4 + 3 + 5 = 17
首先肯定先拆成1–l-1,1–r
考慮模擬埃氏篩法:f[i][j]表示當前要篩2–i,已經篩完了前j個質數剩下的數的和
設最後乙個能篩帶質數的數是pt
p
t那麼答案就為∑t
i=1(
f[n]
[i]−
f[n−
1][i
])/p
i ∑i=
1t(f
[n][
i]−f
[n−1
][i]
)/pi
考慮轉移 首先p
2j>
i pj2
>
i時篩不掉任何數,所以此時f[i][j]=f[i][j-1]
否則我們考慮對其可以篩掉的數分解質因數,發現分解後每乙個數對應的質因數組都是大於等於pj的,並且一定有pj,所以f[i][j]=f[i-1][j]-pj*(f[i/pj][j-1]-sum[j-1]),其中sum[x]為前x個質數的和
這樣就相當於強行選了乙個pj,然後減去那個字首和的原因是不能有更小的質因數
發現第一維的範圍是n−
−√n
級別的,因為−√
n
的有n−
−√n
個,對於i>=n−
−√n
,n/i<=n−
−√n
,也就是說最多只有n−
−√n
個可能會用到的i,然後因為第二維是質數所以還可以除乙個log,最後複雜度是n3
/4∗(
1/lo
gn) n3/
4∗(1
/log
n)
的 在實際的實現中,我們可以按照j分層做,隨著j的增長,第一位是遞減的,對於小於n−
−√n
的我們開乙個陣列直接存,大於n−
−√n
的i我們可以儲存n/i,這樣就可以直接轉移了
#include
#include
#include
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
#define ll long long
using
namespace
std;
const
int maxn=4e5+5;
int f[2][maxn];
int st[maxn],tp;
ll go[maxn],s[maxn],sum[maxn];
bool bz[maxn];
int i,j,k,m;
ll l,r,x,y,t1,t2,now,ans;
ll solve(ll x)
fo(j,1,tp)
}ll l=1; now=0;
while (l<=x)
fo(j,1,tp)
}return ans;
}int main()
演算法 Min 25篩
本篇文章中使用的字母 p 指 text p in text 若函式 f x 滿足,f x 是積性函式 f p 可以使用多項式表示。已知 f p 要能在常數級的時間內計算 f p x x in n min 25篩可以在 theta frac 的時間複雜度內計算 f x 的字首和 或者說 theta n...
Min 25 篩學習筆記
資料和 出處 資料2資料3 打死我也不承認參考了yyb的 min 25 篩可以幹嘛?下文中未特殊說明 p 均指質數集合,p i 或 p 指某個具體質數。求一類積性函式 f x 的字首和,需要滿足 f p 可以寫成多項式的形式,或者操作一下可以寫成多項式 如例題 且 f p k 能快速求出。講真學這個...
Min 25 篩 學習筆記
埃氏篩法 整除分塊 這裡有提到 1.問題模型 2.min 25 篩 3.模板題以及模板 有乙個積性函式 f 對於所有質數 p f p 是關於 p 的多項式,f p k 非常容易計算 不一定是關於 p 的多項式 求 sum f i n leq 10 1s 設集合 p 表示素數集合。設 g sum f ...