diff options
author | aiju <devnull@localhost> | 2016-09-15 08:51:59 +0000 |
---|---|---|
committer | aiju <devnull@localhost> | 2016-09-15 08:51:59 +0000 |
commit | 07284c41f6c4ca6b48e0a6ef389d867bdba2bb57 (patch) | |
tree | 2012482b1f156216d8cb11308e8c9df874334b97 /sys/src/cmd | |
parent | 7bcbef11eb17d0b5f756acd74762d1a285aa134f (diff) |
pc(1): add nsa() command
Diffstat (limited to 'sys/src/cmd')
-rw-r--r-- | sys/src/cmd/pc.y | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/sys/src/cmd/pc.y b/sys/src/cmd/pc.y index 910880ee7..331f35f35 100644 --- a/sys/src/cmd/pc.y +++ b/sys/src/cmd/pc.y @@ -767,6 +767,28 @@ fnsbits(int, Num **a) } Num * +fnnsa(int, Num **a) +{ + int n, i; + mpdigit d; + + a[0] = nummod(a[0]); + if(a[0]->sign < 0){ + numdecref(a[0]); + return error("invalid argument"); + } + n = 0; + for(i = 0; i < a[0]->top; i++){ + d = a[0]->p[i]; + for(; d != 0; d &= d-1) + n++; + } + itomp(n, a[0]); + a[0]->b = 0; + return a[0]; +} + +Num * fngcd(int, Num **a) { a[0] = nummod(a[0]); @@ -889,6 +911,7 @@ main(int argc, char **argv) regfunc("xtend", fnxtend, 2); regfunc("ubits", fnubits, 1); regfunc("sbits", fnsbits, 1); + regfunc("nsa", fnnsa, 1); regfunc("gcd", fngcd, 2); regfunc("minv", fnminv, 2); regfunc("rand", fnrand, 1); |