回文数猜想的aardio验证

文章讨论了一个数学猜想,即任何自然数通过与其倒序数相加并反复进行此过程,最终可能得到回文数。虽然存在例外如196和277386,但无法确定需要多少步骤会得到回文数。代码示例展示了在aardio环境中使用大数库进行相关运算,包括自定义的相等比较和转换函数。
摘要由CSDN通过智能技术生成
//回文数猜想
/**
任何一个自然数与它的倒序数相加,所得的和再与和的倒序数相加,……如此反复进行下去,
经过有限次步骤后,最后必定能得到一个回文数。
这也仅仅是个猜想,因为有些“桀骜的”数并不被“驯服”。比如说196和277386,按照上述变
换规则重复了数十万次,仍未得到回文数。但是人们既不能肯定运算下去永远得不到回文数,
也不知道需要再运算多少步才能最终得到回文数。
**/
import console;
import math.bignum;
//判断整数x是否为回文数,若是返回运算次数,回文数的值;若不是则返回“x没有回文数“
isPalindromes=function(x){
    var con=0;
    var m=math.bignum(x);
    if m.eq(numReverse_order(m)) return 0,m.tostring(10); //假如本身是回文数返回
    while(!m.eq(numReverse_order(m))){
        con++;
        var n=math.bignum(numReverse_order(m))
        m=m.add(n);
        console.logPause(con,m.tostring(10))
    }
    if(m.eq(numReverse_order(m))){
        return con,m.tostring(10); 
    }
    else {
        return tostring(x)++"没有回文数"; 
    }
    
}
//求整数x的反序函数
numReverse_order=function(x){
    var temp=math.bignum(x);
   return string.reverse(temp.tostring(10));;
}
var m=math.bignum("123456789987654321")
console.log(isPalindromes(m))
console.pause()

测试时arrdio的大数库函数要扩充一下,因为引入的tiny-bignum-c.dll库并未得到充分利用,因此在aardio的大数库中增加了大数值相等比较eq()函数和值转换的tonumber(基数)函数.代码如下:

            eq = function(n){
                return 0 == _dll.bignum_cmp( owner,..math.bignum(n));
            };
            tostring = function(radix){
                if(radix=16) return owner; 
                var size = (_arraySize: 32)*8;
                if(radix && radix!=16){
                    var ptr = ..raw.realloc(size+2)
                    _dll.bignum_to_string(owner.bigNumber,ptr,size);
                    
                    var out = ..raw.buffer(1024);
                    var size = _dll.bigNumConvert(ptr,out,16,radix);
                    var s = ..raw.tostring(out,1,size);
                    
                    ..raw.realloc(0,ptr);
                    return s;
                }
            }

当然也可以直接调用元方法,方法是tab@._eq,tab@._tostring(基数).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值