1. 程式人生 > >洛谷——P1403 [AHOI2005]約數研究

洛谷——P1403 [AHOI2005]約數研究

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]約數研究