洛谷3653 小清新數學題(數論)

2022-09-14 17:51:18 字數 1070 閱讀 6171

點此看題面

考慮\(l,r\)範圍很大,我們最多只能篩出\(10^6\),也就是\(o(\sqrt[3]r)\)範圍內的素數。

對於乙個需要求解的\(\mu(x)\),我們可以先把它當中\(\le10^6\)的質因子先全部除去,同時維護出這部分的\(\mu\)值。

而剩下的部分如果不為\(1\),則最多由兩個\(>10^6\)的質因子相乘而得。

如果剩下的是乙個質數(可以用\(millerrabin\)檢測),那麼答案就是在原\(\mu\)值的基礎上再乘個\(-1\)。

如果剩下的是乙個平方數,那麼答案就是\(0\)。

否則,剩下的是兩個不同的大質數,那麼答案就是在原\(\mu\)值的基礎上乘兩次\(-1\),也就是原答案。

前面除質因子的過程最好不要列舉數去找質因子,而是列舉質因子直接掃過區間中的數,這樣就能避免無效列舉。

#include#define tp template#define ts template#define reg register

#define ri reg int

#define con const

#define ci con int&

#define i inline

#define w while

#define n 100000

#define s 1000000

#define ll long long

using namespace std;

int mu[n+5];ll v[n+5];

int pt,p[s+5];i void sieve()

namespace mr//millerrabin素數測試

; i ll qm(con ll& x,con ll& y,con ll& x) //快速乘

i ll qp(ll x,ll y,con ll& x) //快速冪

i bool t(con ll& x,ci p) //二次探測直至不為1

i bool isp(con ll& x) return 1;}//列舉質數檢測

}int main()

洛谷比賽數學題 1

zlh秒的題,我根本不會,出題人欽點此題提高 想來我要爆零了。題面 這題n,a都巨大無比,所以演算法要盡量往k身上靠,先推一波式子 把這裡sigma內的東西拆開得到 第k此項係數c k,k 肯定是1,消去,再換一下i,j列舉順序 這裡就出現了和原式很相似的東西,設乙個二元函式a 剛剛那個式子變為 這...

洛谷3672 小清新簽到題 題解

題目見上面。參考 講真我最開始真不知道求方案數有什麼用。f i j 表示i個數j個逆序對有多少種方案。顯然我們有f i j f i 1 j f i 1 j 1 f i 1 j i 1 就相當於給乙個比序列中所有數都大的數,讓你往裡插。於是令s i j 為字首和,優化成f i j s i 1 j s ...

洛谷 3768 簡單的數學題

根據crash的數字 很容易可以將式子化簡為 begin ans sum limits n sum limits ij i,j sum limits n d 3 sum limits right rfloor mu k k 2 left sum limits right rfloor i right...