とりあえず、当初の予定通りp進ニュートン法とp進FFTを理解したい。
https://qiita.com/qnighy/items/ba7e6cb6e321972bebf2記事のコードをSmileBasicで書き直してみる。
'立っているビットの数を数える
DEF BITCNT(N)
N=(N AND &H55555555)+(N AND &HAAAAAAAA)>>1
N=(N AND &H33333333)+(N AND &HCCCCCCCC)>>2
N=(N AND &H0F0F0F0F)+(N AND &HF0F0F0F0)>>4
N=(N AND &H00FF00FF)+(N AND &HFF00FF00)>>8
N=(N AND &H00FF00FF)+(N AND &HFF00FF00)>>8
END
'奇数Xに対しての平方数判定
DEF IS_SQR_ODD(X)
VAR I%,Y%=1
'逆平方根を求める
FOR I%=1 TO 3
Y%=((3-Y%*Y%*X)*Y%)>>1
Y%=Y% AND 32767
NEXT I%
Y%=X*Y% AND 32767
IF Y% AND 16384 THEN
Y%=32768-Y%
ENDIF
RETURN Y%*Y%==X
END
'平方数判定(奇偶数判定部)
DEF IS_SQR(X)
VAR K%=BITCNT((X&-X)-1)
IF 0==X THEN
RETURN 1
ELSE IF K% AND 1 THEN
RETURN 0
ELSE
RETURN IS_SQR_ODD(X>>K%)
ENDIF
END