fbpx

Problema #1981 – DivizoriSir – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se dă următorul șir de numere naturale:

1, 3, 9, 25, 65, 161, 385, 897, 2049, 4609, 10241, 22529, 49153, 106497…

Pentru un număr natural n, citit de la tastatură, afișati numărul de divizori pentru fiecare dintre primii n termeni ai șirului.

Date de intrare

Programul citește de la tastatură numărul n;

Date de ieșire

Programul va afișa pe ecran cele n numere, reprezentând numărul de divizori ai fiecarui numar dintre cele n, separate prin spații.

Restricții și precizări

  • 0 < n < 60

Exemplu

Intrare

4

Ieșire

1 2 3 3

Explicație

  • 1 are un divizor,
  • 3 are 2 divizori,
  • 9 are 3 divizori,
  • 25 are 3 divizori.

#include <bits/stdc++.h>

using namespace std;

int n;

unsigned long long Count(unsigned long long a);

int main()
{

    cin >> n;

    for(unsigned long long i=0;i<n;i++)
    {
        unsigned long long nr=i*(1ULL<<i)+1;
            cout << Count(nr) << " ";
    }

    return 0;
}

unsigned long long Count(unsigned long long a)
{
   unsigned long long count = 1, k = 0, i;
   if (a == 1 || a == 2)
      return a;
   while ((a & 1) == 0)
   {
      k++;
      a >>= 1;
   }
   if (a == 1)
      return k + 1;
   else
      count = k + 1;
   for(i = 3; i*i <= a; i += 2)
   {
      k = 0;
      while(a % i == 0)
      {
         k++;
         a /= i;
      }
      count *= (k + 1);
   }
   if (a > 1)
      count <<= 1;
   return count;
}
Comentarii

S-ar putea sa iti placa