Duża silnia

0

Dla n=(1,...,10^9) mam wypisać resztę z dzielenia jej silni przez miliard. Oto mój kod:
[code src="C++"]
#include <cstdio>
unsigned int n;
unsigned int resz(unsigned int n)
{
if (n==0||n==1)
return 1;
else
{if (n>=45)
return 0;
else

return (resz(n-1)*n)%1000000000;

}

}
int main()
{
scanf("%u", &n);

printf("%u", resz(n));
return 0;

}
[/code] Otóż w przedziale (13,...,44) program nie działa. Ktoś pomoże początkującemu?

0

Prawie ok, tylko nie mieścisz się w zakresie int. Zmień typ n na unsigned long long (i scanf/printf na %llu).

3

Powiem Ci, że powyżej pewnego N (= 40) wynikiem będzie 0.

Wszystkie wyrazy ciągu jakie są Ci potrzebne:
[1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,227020800,178291200,674368000,789888000,428096000,705728000,408832000,176640000,709440000,607680000,976640000,439360000,984000000,584000000,768000000,504000000,616000000,480000000,880000000,160000000,280000000,520000000,200000000,200000000,400000000,200000000,800000000,0]

0

Prosty problem.

Wystarczy poiczyć

0

cd.
"Dla n=(1,...,10^9) mam wypisać resztę z dzielenia jej silni przez miliard."

logarytm dziesiętny z miliarda = 9.

zatem liczysz: 10 do potęgi (log n! - 9);

gdzie: logn! = log 1 + log2 + log3 ... logn;
co łatwo posumować, nawet dla miliarda.

0

problem polega na tym, że 1e9 mieści się w unsigned int, a 1e9*5 już nie.
return (resz(n-1)*(long long unsigned int)n)%1000000000; powinno załatwić sprawę.
Najalepiej jednak wpisać twardo wynik tak jak podał winerfresh.

0
winerfresh napisał(a):

Powiem Ci, że powyżej pewnego N (= 40) wynikiem będzie 0.

Wszystkie wyrazy ciągu jakie są Ci potrzebne:
[1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,227020800,178291200,674368000,789888000,428096000,705728000,408832000,176640000,709440000,607680000,976640000,439360000,984000000,584000000,768000000,504000000,616000000,480000000,880000000,160000000,280000000,520000000,200000000,200000000,400000000,200000000,800000000,0]

Chyba chodziło Ci o n>4? Wtedy zawsze będzie w środku 5*2 czyli 10. A każda liczba całkowita pomnożona przez 10 będzie miała zero na końcu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1