近似平方

2021年6月8日

以下是执行近似平方的函数:

(定义(asq x)(定义(平方x)(*x(天花板x))(let循环((x(sq x))(xs(list x)))(如果(整数?x)(反向(cons x xs))(环路(平方x)(cons x xs)))>(asq 8/7)(8/7 16/7 48/7 48)>(asq 10/6)(5/3 10/3 40/3 560/3 104720/3 3655461040/31484710602474311520)

这里我们用一个公分母构建了一个迭代表:

(定义(asq表d)(do((n(+d1)(+n1)))((=n(+d d)))(let((xs(asq(/n d)))(显示n)(显示“”)(显示(-(长度xs)1))(显示“”)(显示(汽车(倒车xs))(换行))>(asq表6)7 2 78 2 89 1 310 6 148471060247431152011 3 220>(asq表8)9 4 226810 3 6011 9 73208086643222936780108341767540468970368111383571882958375855624294152307745253445521102451117837145060441781070536105012 1 313 2 1314 2 1415 2 15

你已经可以看到近似平方的混乱本质。如果你想看到一些真正大的数字,请看表中的5或7。

您可以在<a href=“https://ideone.com/31ZGUO”>https://ideone.com/31ZGUO公司</a&gt;.

页:1 2

6对“近似平方”的回应

  1. 扎克

    小巧的小练习。我想有些人写这样的论文的时间太多了!

    以下是我使用朱莉娅对此的看法:https://pastebin.com/TtiyB0Wu网站

  2. 球状物

    这是哈斯克尔版本。

    导入数据。比率(分母、分子)导入系统。环境(getArgs)近似Sq::Rational->Rational近似平方x=x*到有理数(上限x::整数)iterApproxSq::有理->整数iterApproxSq=分子。头部。iterateUntil isInteger大约为Sq其中isInteger=(==1)。分母iterateUntil p f=dropWhile(非.p)。删除1。迭代f主::IO()main=做rs<-getArgsmapM_(print.iterApproxSq.read)rs
    $ ./大约8%7 3%2 5%2 7%2 9%2 11%2 13%2 15%2 17%2 19%2 3%3 4%3 5%348601426806533209360120415494192562895181484710602474311520
  3. 贾里德

    Lisp语言:
    (defon近似平方(数字)
    (环路
    对于n=数字,则(*n(上限n))
    当(整数n)
    do(返回n))

    >(地图车#“近似平方”(8/7 3/2 5/2 7/2 9/2 11/2 13/2 15/2 17/2 19/2 3/3 4/3 5/3))(48 3 60 14 268065 33 2093 60 1204154941925628 95 1 8 1484710602474311520)
  4. 丹尼尔

    以下是Python中的一个解决方案。

    def近似平方(n,d):当n%d时:n*=(n+d-1)//d返回n//d打印(近似平方(8,7))打印(近似平方(10,6))打印(近似平方(6,5))

    输出:

    4814847106024743115209532960047385704656...9010186950239453184
  5. 丹尼尔

    这是一个使用GMP的C解决方案。

    //$gcc-o近似平方近似平方.c-lgmp#包括<stdlib.h>#包括<gmp.h>int main(int argc,char*argv[]){如果(argc!=3)返回EXIT_FAILURE;mpz t n;mpz输入(n);mpz_set_str(n,argv[1],10);mpz _ t d;mpz输入(d);mpz_set_str(d,argv[2],10);mpz t q;mpz输入(q);而(!mpz_divisable_p(n,d)){mpz_cdiv _q(q,n,d);mpz _ mul(n,n,q);}mpz_divexact(n,n,d);gmp_printf(“%Zd\n”,n);mpz清除(n);mpz清除(d);mpz清除(q);返回EXIT_SUCCESS;}

    示例用法:

    $ ./近似平方8 748$ ./近似平方10 61484710602474311520$ ./近似平方6 59532960047385704656...9010186950239453184
  6. […]是编写一个迭代近似平方的程序。完成后,欢迎您阅读或运行建议的解决方案,或发布您自己的解决方案或在评论中讨论练习[…]

留下评论