Informatică, întrebare adresată de pmarian98, 8 ani în urmă

#2323 prim001

Cerința
Se dă un număr natural n. Să se afle numărul divizorilor naturali ai lui nn.

Date de intrare
Programul citește de la tastatură numărul n.

Date de ieșire
Programul va afișa pe ecran numărul divizorilor lui nn, modulo 59999.

Restricții și precizări
1 ≤ n ≤ 1013



Exemplu
Intrare

4
Ieșire

9
Explicație

Numărul 44=256 are 9 divizori: 1,2,4,8,16,32,64,128,256.

Obtin 60%, "am depasire timp"
As dori o sursa mai eficienta daca se poate :D


pmarian98: Uite o idee de a mea
pmarian98: face 10%
pmarian98: #include
using namespace std;

int putere(int x)
{
int n,nr;
n=x;
nr=1;
while(n!=0)
{
n--;
nr=nr*x;
}
return nr;
}

int nr_div(int x)
{
int d,nr=0;
for(d=1;d*d if(x%d==0)
nr+=2;
if(d*d==x)
nr++;
return nr;
}

int main()
{
int x;
cin>>x;
x=putere(x);
cout< return 0;
}
Razzvy: Daca incerci sa calculezi n^n, sari cu mult peste tipul de date int. Deja 11^11 este peste. Mai bine este sa gasesti o formula matematica intre numarul de divizori ai lui n si n^n. <== < =
Razzvy: test
Razzvy: < test
Razzvy: E mai usor daca te gandesti la exponentii din descompunerea in factori primi.
pmarian98: scz sunt usor bagat in ceata
pmarian98: Daca imi trimiti o sursa iti dau COROANA
pmarian98: mersi pt ajutor

Răspunsuri la întrebare

Răspuns de boiustef
5

#include <iostream>

using namespace std;

long long n, m, d, p, exp[200], rez[200], k, i;

int main()

{

   cin >> n;

   d=2; m=n;

   while(m!=1)

   {

       p=0;

       while(m%d==0)

       {

           m=m/d;

           p++;

       }

       if(p>0) { ++k; exp[k]=p; }

       d++;

   }

       for (i=1; i<=k; ++i)

       {

           exp[i]=(n*exp[i]+1)%59999;

       }

   m=1;

   for (i=1; i<=k; ++i)

   {

       m=m*(exp[i])%59999;

   }

   cout << m;

}


pmarian98: Iti multumesc foarte mult
boiustef: bafta... sarbatori fericite !
pmarian98: mersi la fel !!!
pmarian98: vezi ca am mai pus probleme XD
boiustef: XD ???
Alte întrebări interesante