Soluție HackerRank pentru Leonardo's Prime Factors, subdomeniul Fundamentals, în C++14. Include cerința formatată, exemple, explicația pașilor și cod…

  • Problemă: Leonardo's Prime Factors
  • Domeniu: Fundamentals
  • Limbaj: C++14

Challenge: Leonardo's Prime Factors

Subdomeniu: Fundamentals (fundamentals)

Scor cont: 10.0 / 10

Submission status: Accepted

Submission score: 1.0

Submission ID: 464719547

Limbaj: cpp14

Link challenge: https://www.hackerrank.com/challenges/leonardo-and-prime/problem

Cerință

Leonardo loves primes and created q queries where each query takes the form of an integer, n. For each n, count the maximum number of distinct prime factors of any number in the inclusive range [1, n].

Note: Recall that a prime number is only divisible by 1 and itself, and 1 is *not* a prime number.

Example
n = 100

The maximum number of distinct prime factors for values less than or equal to 100 is 3. One value with 3 distinct prime factors is 30. Another is 42.

Function Description

Complete the *primeCount* function in the editor below.

*primeCount* has the following parameters:

- *int n:* the inclusive limit of the range to check

Returns

- *int:* the maximum number of distinct prime factors of any number in the inclusive range [0 - n].

Input Format

The first line contains an integer, q, the number of queries.
Each of the next q lines contains a single integer, n.

Constraints

+ 1 ≤ q ≤ 10^5
+ 1 ≤ n ≤ 10^18

Cod sursă

#include <stdio.h>
#include <stdlib.h>

unsigned long long int gcd(unsigned long long int a, unsigned long long int b)
{

	while (b) {
		unsigned long long int t = b;

		b = a % b;
		a = t;
	}
	return a;
}

unsigned int max_unique_primes(unsigned long long int n)
{
	unsigned int count;
	unsigned long long int prod;
	unsigned long long int prim;

	if (n < 2)
		return 0;

	prod = 2;
	count = 1;
	for (prim = 3; prod * prim <= n; prim += 2) {
		if (gcd(prod, prim) == 1) {
			prod *= prim;
			count++;
		}
	}
	return count;
}

int main(void)
{
	unsigned int q;

	if (scanf("%u", &q) != 1)
		return EXIT_FAILURE;

	while (q--) {
		unsigned long long int n;

		if (scanf("%llu", &n) != 1)
			return EXIT_FAILURE;
		
		printf("%u\n", max_unique_primes(n));
	}
	return EXIT_SUCCESS;
}
HackerRank Fundamentals – Leonardo’s Prime Factors