[数论] [洛谷] P1403 [AHOI2005]约数研究

脸上笑嘻嘻

心里MMP

 

素数因子只有1和本身 所以不用判

线筛掉素数

剩下暴力

 

 

是当然过不了的!!!!!

大神解法:

1到N中

N个数有因子1

N/2个数有因子2 

N/3个数有因子3

…………………

然后O(n)解出答案

 

#include <iostream>
using namespace std;

typedef long long ll;

const int MAXN = 1e6 + 10;

ll prime[MAXN] = {0};

ll check[MAXN] = {0, 1}, tf = 0;

void initprime(int len)
{
    for(int i = 2; i < len; i++)
    {
        if(check[i] == 0)
            prime[tf++] = i;

        for(int j = 0; j < tf && i * prime[j] < len; j++)
        {
            check[i * prime[j] ] = 1;

            if(i % prime[j] == 0)
                break;
        }
    }
}

ll judege(ll x)
{
    ll ans = 0;

    for(int i = 1; i <= x; i++)
    {
        if(x % i == 0)
            ans ++;
    }

    return ans;
}

int main()
{
    ll n, ans = 0;

    cin>>n;

    /*initprime(n + 5);

    for(int i = 1; i <= n; i++)
    {
        if(check[i] == 0)
            ans+= 2;
        else
            ans += judege(i);
    }

    cout<<ans<<endl;*/

    for(int i = 1; i <= n; i++)
    {
        ans += (n / i);
    }
    
    cout<<ans<<endl;

    return 0;
}

 

posted @ 2018-08-01 15:30  张浦  阅读(105)  评论(0编辑  收藏  举报