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

2021-08-28 05:41:54 字數 564 閱讀 1670

題意: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/(x/i),括號的x/i可以取整,也就可以找到r的最大值(因為x/i取整肯定小於x/i),再令i=r+1,繼續操作就行了。

#includeusing namespace std;

#define inf 0x3f3f3f3f

#define ll long long

const int maxn=200005;

const double eps=1e-8;

const double pi = acos(-1.0);

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

int main()

printf("%lld\n",sum);

}return 0;

}

牛客練習賽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 因數個數和 數論分塊

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

牛客練習賽 因數個數和 分塊或容斥

1.分塊 時間複雜度為o 依次計算每個塊的貢獻1 r1,l2 r2,l3 r3,l4 r4,ln rn 舉例 計算10的因數的個數 第一塊 1到1,每個數的貢獻為10,總貢獻為 10 1 1 1 第二塊 2到2,每個數的貢獻為5,總貢獻為 5 2 2 1 第三塊 3到3,每個數的貢獻為3,總貢獻為 ...