洛谷——P1403 [AHOI2005]約數研究
阿新 • • 發佈:2017-11-19
reg 計算 display using ++ 因數 closed 計算機 spl
P1403 [AHOI2005]約數研究
題目描述
科學家們在Samuel星球上的探險得到了豐富的能源儲備,這使得空間站中大型計算機“Samuel II”的長時間運算成為了可能。由於在去年一年的辛苦工作取得了不錯的成績,小聯被允許用“Samuel II”進行數學研究。
小聯最近在研究和約數有關的問題,他統計每個正數N的約數的個數,並以f(N)來表示。例如12的約數有1、2、3、4、6、12。因此f(12)=6。下表給出了一些f(N)的取值:
f(n)表示n的約數個數,現在給出n,要求求出f(1)到f(n)的總和。
輸入輸出格式
輸入格式:
輸入一行,一個整數n
輸出格式:
輸出一個整數,表示總和
輸入輸出樣例
輸入樣例#1: 復制3輸出樣例#1: 復制
5
說明
【數據範圍】
20%N<=5000
100%N<=1000000
n*根n暴力枚舉每個數:70
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,w,s,ans; int read() {暴力枚舉int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } int main() { n=read(); for(int i=1;i<=n;i++) { for(int j=1;j*j<=i;j++) if(i%j==0) s++,w=j; ans+=s*2;s=0; if(w*w==i) ans--; } printf("%d",ans); return 0; }
o(n)計算
o(n)枚舉每個數的倍數,例如當n=3的時候是1的倍數的數有3個,是2的倍數的數有1個,是3的倍數的數有1個,因此所有數的因數和為3+1+1=5
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,w,s,ans; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } int main() { n=read(); for(int i=1;i<=n;i++) ans+=n/i; printf("%d",ans); return 0; }
洛谷——P1403 [AHOI2005]約數研究