4 10 省選模擬賽 約數 數論 轉換 三元組個數

2022-02-05 01:11:30 字數 1172 閱讀 3578

題目很簡明 可是 上午反演的時候無計可施。

直接做是nln的 可以簡單轉換一下 原式=\(\sum_^n\fracd(x)\)

這樣就有乙個o(n)的做法了 由於d是積性函式直接篩就好了。沒必要整除分塊 直接o(n).

const int maxn=15000010;

int n,top;

int v[maxn],g[maxn],p[1000010],d[maxn];

inline void prepare()

rep(1,top,j)

^[(x,i)=x]\)這個東西沒啥用 還是很難化簡。

還要乙個 \(d(xy)=\sum_^\sum_^[(i,j)=1]\)

都跟本題沒啥關係。

這道題之所以能做是因為 求的是字首和這個特異性問題。

\(d(w)=\sum_1\) 觀察這個東西可以發現\(x,\frac\)這個東西是乙個二元組。

而\(\sum_^n\sum_d(p)\)觀察這個東西 對於乙個i來說 有\(\frac,d(p)\)即\(\frac,\frac,x\)

這個三元組會對答案貢獻1.

可以發現 對於所有的三元組 xyz<=n 這樣的三元組都會被計數。

且這個三元組是唯一存在於乙個數字i內的。

設x<=y<=z.若x<=\(n^},y\leq \sqrt(\frac)\)

列舉x,y統計z的數量即可。

由於x,y,z可以是乙個排列所以要乘6.

但是觀察上面的三元組的情況 發現對於x==y的時候這種情況是沒有排列的所以需要減掉相應的次數 三個數字相等也同理。

非常妙的一道題。至於複雜度接近於\(n^}\)(我也不會證明。

const ll maxn=100010;

ll n;

int main()

ll cnt=0;

for(ll i=1;i<=w2;++i)cnt+=n/i/i;

putl(ans*6-cnt*3-2*w1);

return 0;

}

藍橋杯省賽之遞增三元組

給定三個整數陣列 a a1,a2,an b b1,b2,bn c c1,c2,cn 請您統計有多少個三元組 i,j,k 滿足 1.1 i,j,k n 2.ai 輸入格式 第一行包含乙個整數n 第二行包含 個整數a1,a2,an。第三行包含 個整數b1,b2,bn。第四行包含 個整數c1,c2,cn。...

第九屆藍橋杯省賽C B組 遞增三元組

給定三個整數陣列 a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1 i,j,k n ai輸入格式 第一行包含乙個整數 n。第二行包含 n 個整數 a1,a2,an。第三行包含 n 個整數 b1,b2,bn。第四行包含 n 個整數 c1,c...

2023年第九屆藍橋杯省賽 遞增三元組

給定三個整數陣列 a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1.1 i,j,k n 2.ai bj ck 輸入格式 第一行包含乙個整數n。第二行包含n個整數a1,a2,an。第三行包含n個整數b1,b2,bn。第四行包含n個整數c1,...