題意:
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...