1. 程式人生 > >線性篩約數個數和、約數和

線性篩約數個數和、約數和

#include<cstdio>

using namespace std;

#define N 1000001

bool vis[N];
int prime[N];

int t[N],e[N];

int main()
{
    int n;
    scanf("%d",&n);
    int cnt=0;
    t[1]=1;
    for(int i=2;i<=n;++i)
    {
        if(!vis[i])
        {
            prime[++cnt]=i;
            t[i]
=2; e[i]=1; } for(int j=1;j<=cnt;++j) { if(i*prime[j]>n) break; vis[i*prime[j]]=true; if(i%prime[j]==0) { t[i*prime[j]]=t[i]/(e[i]+1)*(e[i]+2); e[i*prime[j]]=e[i]+1;
break; } else { t[i*prime[j]]=t[i]*2; e[i*prime[j]]=1; } } } long long ans=0; for(int i=1;i<=n;++i) ans+=t[i]; printf("%lld",ans); }

相關推薦

線性約數個數約數

#include<cstdio> using namespace std; #define N 1000001 bool vis[N]; int prime[N]; int t[N],e[N]; int main() { int n; sc

約數定理(約數個數定理,約束定理)

約數個數定理: 對於一個大於1正整數n可以分解質因數: 則n的正約數的個數就是 。 其中a1、a2、a3…ak是p1、p2、p3,…pk的指數。 定理簡證: 首先同上,n可以分解質因數:n=p1^a1×p2^a2×p3^a3*…*pk^ak, 由約

從鍵盤中輸入一個整數n,求1-n的,以及偶數奇數

n=int(input("從鍵盤中輸入一個數:")) sum1=0 sum2=0 sum3=0 i=1 while i<=n: sum1+=i if i%2==0: sum2+=i else:

Python演算法----求1-100之間的偶數奇數

i = 1 sum1 = 0 sum2 = 0 while i <= 100: if i % 2 == 0: sum1 += i else: sum2 += i i +=1 print(“1-100之間偶數和為:%d” % sum1) print(“1-1

線性約數個數約數的新方法

n) http 約數 質因子 9.png int pan 思考 -s 最近本人腦洞大開,發現了一種線性篩約數個數和約數和的一種神奇方法。 網上的方法我看基本都是利用num[i]數組記錄i最小的質因子的個數,然後再搞搞。 我認為可以省去num[i]數組,直接進行遞推。 我們知

數學 線性約數個數約數

線性篩約數個數和,約數和 一,線性篩約數個數和 ​ 根據唯一分解定理,可得: \[ n=p_1^{r_1}*p_2^{r_2}*……*p_k^{r_k} \] ​ 對於每個n的約束,肯定是由以上質因數\(p_k\)相乘得來的,那麼根據乘法原理,每個質因數都可以選擇\(0\)到\(r_k\)這\(r_k+1

[杜教 約數個數字首] BZOJ 4176 Lucas的數論

套用陳老師r老師等式後反演 #include<cstdio> #include<cstdlib> #include<algorithm> #include

python實現遞迴非遞迴求兩個數最大公約數最小公倍數

    最大公約數和最小公倍數的概念大家都很熟悉了,在這裡就不多說了,今天這個是因為做題的時候遇到了所以就寫下來作為記錄,也希望幫到別人,下面是程式碼: #!/usr/bin/env python #coding:utf-8 from fractions import gc

線性約數函數

ret bre 函數 int cpp gist reg print for 挺麻煩的,就當存一下板子了 #include<iostream> #include<cstring> #include<cstdio> #define maxn

[BZOJ3994][SDOI2015]約數個數

-s math pre ret 表達 cnblogs void sin bre BZOJ Luogu 題意: 給定n,m,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)\),其中\(d(x)\)表示x的約數個數。多組數據,n,m<=50000

洛谷P3327 [SDOI2015]約數個數 【莫比烏斯反演】

ios wap 文件包含 long define line tchar pan 包含 題目 設d(x)為x的約數個數,給定N、M,求\(\sum_{i = 1}^{N} \sum_{j = 1}^{M} d(ij)\) 輸入格式 輸入文件包含多組測試數據。第一行,一個整數T

【刷題】BZOJ 3994 [SDOI2015]約數個數

name max ima a* register eof void rip 數據 Description 設d(x)為x的約數個數,給定N、M,求 Input 輸入文件包含多組測試數據。 第一行,一個整數T,表示測試數據的組數。 接下來的T行,每行兩個整數N、M。 Out

bzoj3994:[SDOI2015]約數個數

http mat print Go prim span geo 映射 com 題目鏈接 bzoj 3994: [SDOI2015]約數個數和 題解 結論與結論的證明參考了rqy的博客 計算\(d(ij)\)時,把ij的每個約數d映射到\((a=gcd(d,i),b=(gcd

BZOJ3994:[SDOI2015]約數個數——題解

min 博客 ace bre sdn .cn +++ HR HP http://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://www.luogu.org/problemnew/show/P3327#sub 參考:

[SDOI2015]約數個數

pac mes 計算 輸入格式 sdoi efi sta 接下來 bits 原題鏈接 題目描述 設\(d(x)\)為\(x\)的約數個數,給定\(N、M\),求\(\sum_{i=1}^{N}\sum_{j=1}^{m}d(ij)\) 輸入輸出格式 輸入格式: 輸入文

bzoj3994: [SDOI2015]約數個數(莫比烏斯反演+分塊)

put name 一行 AI algorithm scan space 代碼 print www.cnblogs.com/shaokele/ bzoj3994: [SDOI2015]約數個數和   Time Limit: 20 Sec   Memory Limit: 1

【題解】洛谷6月月賽 —— 「數學」約數個數

分解 pri clas left pac 這樣的 DC 兩個 探測   看德國戰墨西哥去了結果發現比賽只剩下30分鐘……當然之後又思考這題挺久也還是不會做。看了一下題解,覺得這個做法挺厲害的,在這裏記錄一下:   原式實際上就是:(\(K +=

BZOJ.3994.[SDOI2015]約數個數(莫比烏斯反演)

bre pro tps ali pan ons -m online 莫比烏斯反演 題目鏈接 \(Description\) 求\[\sum_{i=1}^n\sum_{j=1}^md(ij)\] \(Solution\) 有結論:\[d(nm)=\sum_{i|d}\sum_

洛谷P3327 [SDOI2015]約數個數(莫比烏斯反演)

預處理 www oid com int pen init main 個性 傳送門 公式太長了……我就直接抄一下這位大佬好了……實在懶得打了 首先據說$d(ij)$有個性質$$d(ij)=\sum_{x|i}\