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.
Răspunsuri la întrebare
Răspuns de
8
#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;
}
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;
}
saracpopa:
Multumesc mult!!!!!
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Fizică,
9 ani în urmă
Matematică,
9 ani în urmă
Franceza,
9 ani în urmă