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
In reply to Re: Simple arithmetic?
by cheako
in thread Simple arithmetic?
by BrowserUk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |