in reply to Simple arithmetic?
We are talking about integer factorisation?! Can't be calculated without a quantum computer.
Plus your code could endless loop.
$c -= 4096 while $c % $r && $c > 0;
One good solution is to use a lookup table.
use Fcntl; # For O_RDWR, O_CREAT, etc. use SDBM_File; # 0666 reduced by umask. tie my%__intfactor, 'SDBM_File','/var/tmp/intfactor.sdbm', O_RDWR|O_CREAT, 0666) or { warn"Couldn't tie SDBM file '/var/tmp/intfactor.sdbm': $!"; warn"continuing with ramdb"; }; sub intfactor() { exists $__intfactor{%r} and return $__intfactor{%r}; $c -= 4096 while $c % $r; return $__intfactor{%r}=$c; } # I'm lost by the meaning of your code, where is $s used? $r = 12; $s = 2*1024**3; print intfactor($c,$r);
Further optimizations can be made with a better search pattern:
http://en.wikipedia.org/wiki/Least_common_multiple
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Simple arithmetic?
by marto (Cardinal) on Mar 08, 2015 at 13:23 UTC | |
by LanX (Saint) on Mar 08, 2015 at 14:48 UTC | |
by marto (Cardinal) on Mar 08, 2015 at 19:00 UTC | |
by LanX (Saint) on Mar 08, 2015 at 19:07 UTC | |
by marto (Cardinal) on Mar 08, 2015 at 19:09 UTC | |
| |
|
Re^2: Simple arithmetic?
by BrowserUk (Patriarch) on Mar 08, 2015 at 09:34 UTC | |
by hdb (Monsignor) on Mar 08, 2015 at 13:07 UTC | |
by Laurent_R (Canon) on Mar 08, 2015 at 14:06 UTC | |
by BrowserUk (Patriarch) on Mar 08, 2015 at 14:39 UTC | |
by LanX (Saint) on Mar 08, 2015 at 14:50 UTC | |
by BrowserUk (Patriarch) on Mar 08, 2015 at 21:19 UTC |