16,017,376 members

See more:

suppose i have found out the factorial of 2000. then if i have to find out the square root of the large factorial..then what to do?? can some one plzz frwd the algo for it..i think it might be newton raphson method.

Comments

Permalink

Share this answer

Comments

decodererror2345
22-Oct-12 13:19pm

if u know the answer then plzz let me know as i am nt getting way to implement it..as in this method i have to take xpower(n) in which x is the factorial of 2000

Richard MacCutchan
22-Oct-12 14:00pm

Follow the link I gave you and start reading how Newton Raphson works.

If you **know** that you will be taking the square root of the result of the factorial function, just implement a function that directly computes the square root of factorial:

since factorial(n) is the product of the integers from 2 to n

square root of factorial(n) is the product of the square root of each of those integers from 2 to n

**or, more efficient:**

return

if your

Edit: I forgot that you indicated that the language you're using is C:

The concepts are the same but the function names are different.

since factorial(n) is the product of the integers from 2 to n

square root of factorial(n) is the product of the square root of each of those integers from 2 to n

return

`Math.Pow(factorial(n), 0.5)`

(assuming `factorial(n)`

is type `double`

)if your

`factorial(n)`

is returning `BigInteger`

, then use `Math.Exp(Math.BigInteger(factorial(n))/2.0)`

Edit: I forgot that you indicated that the language you're using is C:

The concepts are the same but the function names are different.

Permalink

Share this answer

v2

Comments

decodererror2345
24-Oct-12 7:31am

i appreciate your answer but i want to do the program in c language. and i think upto some extent biginteger also fails if i take a really very large number..but thank u so much for ur comment.

C#

#include <stdio.h> #include <math.h> int main() { long double c, n, fact = 1; printf("Enter a number to calculate it's factorial\n"); scanf("%d", &n); for (c = 1; c <= n; c++) fact = fact * c; long double result=csqrtl(fact); printf("Squareroot of %d = %d\n", n, result); return 0; }

----------------------------------------------------------------------------------------------------

for more details on square root refer to..

http://www.codecogs.com/reference/computing/c/math.h/sqrt.php[^]

I think this solves your problem.

for data type see my solution below

Permalink

Share this answer

v3

Comments

CPallini
22-Oct-12 16:59pm

Even a quadruple precision number cannot store

`2000!`

result.
Perhaps the BigInteger structure can help you:(As C++ and C are almost same so try this: for data type to store.)

http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

Permalink

Share this answer

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject,
20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8
+1 (416) 849-8900

And second, your question looks like you got some homework which you try to avoid by having others do it for you. Not only would that counteract the idea of your homework in the first place, it would keep you from making progress. Most people here don't want that to happen.

If your question is not homework, then show us which steps you have tried on your own and where you got stuck. You haven't tried anything yet? Why do you think other people would invest their time then?

So: Try do come up with a couple of ideas yourself and when you got stuck, let us know exactly where and why. That way your success rate in this forum (and probably in general) will be significantly higher. And, believe me, it can be fun, too!

And: Yes, I do know the answer to this problem.