Soluție HackerRank pentru Equations, subdomeniul Number Theory, în C++14. Include cerința formatată, exemple, explicația pașilor și cod sursă.

  • Problemă: Equations
  • Domeniu: Number Theory
  • Limbaj: C++14

Challenge: Equations

Subdomeniu: Number Theory (number-theory)

Scor cont: 60.0 / 60

Submission status: Accepted

Submission score: 1.0

Submission ID: 464737199

Limbaj: cpp14

Link challenge: https://www.hackerrank.com/challenges/equations/problem

Cerință

Find the number of positive integral solutions for the equations
(1 / x) + (1 / y) = (1 / N!)

Input Format
An integer N 

Output Format
The number of positive integral solutions for the above equation modulo 1000007

Constraints
1 ≤ N ≤ 10^6

Sample Input00

1

Sample Output00

1

Sample Input01

32327

Sample Output01

656502

Sample Input02

40921

Sample Output02

686720

Cod sursă

// https://www.hackerrank.com/challenges/equations

#include <iostream>

using namespace std;

#define MAX 1000010
#define MODULO 1000007

int prime[MAX] = {0}, cnt[MAX] = {0};

int main() {
    long long ans = 1LL;
    int n;

    cin >> n;

    for (int i = 2; i <= MAX /i; i ++) {
        if (!prime[i]) {
          prime[i] = i;

          for (int j = i * i ; j < MAX; j += i)
            prime[j] = i;
        }
    }

    for (int i = 2; i <= n; i ++) {
        int m = i;

        while (m > 1) {
            if (prime[m] == 0)
                prime[m] = m;

            cnt[prime[m]] += 2;
            m /= prime[m];
        }
    }

    for (int i = 0; i <= n; i ++)
        ans = ans * (1 + cnt[i]) % MODULO;

    cout << ans << endl;
    return 0;
}
HackerRank Number Theory – Equations