AtCoder备赛刷题 ABC 383 | 9 Divisors

学习C++从娃娃抓起!记录下AtCoder(日本算法竞技网站)备赛学习过程中的题目,记录每一个瞬间。

附上汇总贴:AtCoder 备赛刷题 | 汇总


【题目描述】

Find the number of positive integers not greater than N N N that have exactly 9 9 9 positive divisors.
找到不大于 N N N 且恰好有 9 9 9 个因数的正整数的数量。

【输入】

The input is given from Standard Input in the following format:

N

【输出】

Print the answer.

【输入样例】

200

【输出样例】

3

【代码详解】

《AtCoder 9 Divisors》 #数论# #素数判断,质数,筛法#

#include 
using namespace std;
#define int long long 
const int MAXN = 1000005;
int primes[MAXN], cnt;
bool st[MAXN];
int ans;
void get_primes()
{
  
    for (int i=2; i<=MAXN; i++)
    {
        if (!st[i]) primes[cnt++] = i;
        for (int j=0; primes[j]<=MAXN/i; j++)
        {
            st[primes[j]*i] = true;
            if (i%primes[j]==0) break;
        }
    }
}
signed main()
{
    int n;
    cin >> n;
    get_primes();
    for (int i=0; i<cnt; i++)
    {
        if (primes[i]*primes[i]*primes[i]*primes[i]>n) break;
        for (int j=i+1; j<cnt; j++)
        {
            if (primes[i]*primes[i]*primes[j]*primes[j]>n) break;
            ans++;
        }
    }
    for (int i=0; i<cnt; i++)
    {
        if (primes[i]*primes[i]*primes[i]*primes[i]*primes[i]*primes[i]*primes[i]*primes[i]>n) break;
        ans++;
    }
    cout << ans << endl;
    return 0;
}

【运行结果】

200
3

你可能感兴趣的:(算法)