牛客練習賽25 A 因數個數和 數論分塊

2022-05-26 11:18:11 字數 1337 閱讀 1563

題意:

q次詢問,每次給乙個x,問1到x的因數個數的和。

1<=q<=10 ,1<= x<=10^9 

1s思路:

對1~n中的每個數i,i作為i,2i,3i,...的約數,一共作為n/i個數的約數

於是題目就轉化為求$\displaystyle \sum_^n\lfloor \frac\rfloor$

數論分塊$o(\displaystyle \sqrt)$解決

**:

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define fst first

#define sc second

#define pb push_back

#define mem(a,b) memset(a,b,sizeof(a))

#define lson l,mid,root<<1

#define rson mid+1,r,root<<1|1

#define lc root<<1

#define rc root<<1|1

#define lowbit(x) ((x)&(-x))

using

namespace

std;

typedef

double

db;typedef

long

double

ldb;

typedef

long

long

ll;typedef unsigned

long

long

ull;

typedef pair

pi;typedef pair

pll;

const db eps = 1e-6

;const

int mod = 1e9+7

;const

int maxn = 2e5+2

;const

int maxm = 2e6+100

;const

int inf = 0x3f3f3f3f

;const db pi = acos(-1.0

);int

main()

printf(

"%lld\n

", ans);

}return0;

}

牛客練習賽25 因數個數和

大佬的部落格寫的很清楚 求1 n的因子個數和 就是從1 n中qu的數任意取乙個數i 在1 n之間有多少是i的倍數 即 n i 因為n i的結果也是 n的因數 所以可以只算 1 sqrt n 然後乘 2 因為n i可以等於i,乘2重複計算了,還要減去這些重複計算的數 只要 i的平方小於等於n 都算重複...

牛客訓練賽25 A 因數個數

題目鏈結 無語。這題很迷啊,原諒我的菜,剛開始想用預處理尤拉篩和字首和,可是這題太血崩了,這樣一樣要遍歷,1 e9的範圍,後來翻網上題解,發現其實是個還算經典的問題 這題可以用離散和做嘛,如何離散和?先別著急,我們先想想,為啥這題不用尤拉函式做。我們平時尤拉函式的題,都還能算比較難的題了,這題不僅僅...

牛客練習賽25 因數個數和(貢獻法)

題意 q次詢問,每次給乙個x,問1到x的因數個數的和。思路 考慮1到x的數的因子為1有x 1,因子為2有x 2,所以要求的就是 從ans式子可以看出,12 5和12 6都是2,12 7和12 8和 12 12都是1,對應的區間為 5,6 7,12 這些區間的l和r是可以算出來的,令i從1開始,r x...