So basically we can pair up the divisors for any given \(n\). So, l will have the smaller one and h will store the larger one ( such that \( l \times h =n \) ) and we are incrementing l by one each time and correspondingly decreasing h. So h will decrease much faster and we would be skipping lot of numbers which anyway we need not check.
PS: I forgot to include the line to check whether \( l= h\) that is if n is a perfect square.
@Sudeep Salgia
–
We can bring down \(\frac{n}{2}\) to \(\lfloor\sqrt{n}\rfloor\). I still can't understand how will it help while dealing with higher numbers. Let me compile.
Try long double it has the max and min values \(10^{4932}\quad and \quad 10^{-4932}\) respectively and has a memory of 10 bytes. Its the biggest as far as I know.
Big numbers cannot be stored in long. Therefore we need something which is even bigger, like float or double. The problem with using "%" function with float/double is that it will not work. "%" is meant to work only with integers(int or long or short), It will not work with float and double as they are decimal values. Does 100%2.3 make sense?
Hence we use a workaround to find the true factors of n by using floor.
@Raghav Vaidyanathan
–
Ouch. I didn't notice that you used double. But then why not use long long? long long has a higher range than a double for the same memory, since a double can only hold 15 significant digits whereas long long can hold upto 18.
Note I don't use C++ so I have no idea if long long is used commonly.
Easy Math Editor
*italics*
or_italics_
**bold**
or__bold__
paragraph 1
paragraph 2
[example link](https://brilliant.org)
> This is a quote
2 \times 3
2^{34}
a_{i-1}
\frac{2}{3}
\sqrt{2}
\sum_{i=1}^3
\sin \theta
\boxed{123}
Comments
Sort by:
Top NewestYou can firstly improve by running the loop till \( i \leq \frac{n}{2} \). Or you can try this:
Log in to reply
Yes, I noticed \(\frac{n}{2}\) thing. Can you explain algorithm you used? Thanks.
Log in to reply
So basically we can pair up the divisors for any given \(n\). So, l will have the smaller one and h will store the larger one ( such that \( l \times h =n \) ) and we are incrementing l by one each time and correspondingly decreasing h. So h will decrease much faster and we would be skipping lot of numbers which anyway we need not check.
PS: I forgot to include the line to check whether \( l= h\) that is if n is a perfect square.
Log in to reply
Log in to reply
Log in to reply
How many times should i try to help before someone notices Pranjal Jain . I have included a few ideas in the following from Sudeep Salgia as well:
Here are the factors of \(10000000099\)
And here are the factors of \(7296872389761\)
Log in to reply
Thanks. Sorry for not noticing. I am quite inactive now a days on B'ant. (Turned off all email notifications as well)
Log in to reply
@Pranjal Jain @Sudeep Salgia
Log in to reply
Try long double it has the max and min values \(10^{4932}\quad and \quad 10^{-4932}\) respectively and has a memory of 10 bytes. Its the biggest as far as I know.
Log in to reply
Modulus doesn't work with floating data types.
Log in to reply
Maybe you could try using long variable or long long . But that won't be really necessary if you are writing this for boards
Log in to reply
I program for fun. -_- I hate boards
Log in to reply
Oh ! So have you studied any algorithm books like CLRS ? Or are you active on websites like topcoder , spoj ?
Log in to reply
Log in to reply
Try Java Codes,They are always better than C++
Log in to reply
For that, I'll have to learn java properly.
Log in to reply
Try this out
Log in to reply
Why are you taking
to check if \( i \) is a factor of \( n \) instead of
Log in to reply
Big numbers cannot be stored in long. Therefore we need something which is even bigger, like float or double. The problem with using "%" function with float/double is that it will not work. "%" is meant to work only with integers(int or long or short), It will not work with float and double as they are decimal values. Does 100%2.3 make sense?
Hence we use a workaround to find the true factors of n by using floor.
Log in to reply
Note I don't use C++ so I have no idea if long long is used commonly.
Log in to reply
Log in to reply