各个数位都不含9的所有8位数的倒数和是多少?贴吧神回复的算法是什么样

发表时间:2017-12-29 09:40:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《全新奔腾b50咋样?我买了台联想B50-70》相关知识。本篇中小编将再为您讲解标题各个数位都不含9的所有8位数的倒数和是多少?贴吧神回复的算法是什么样。

主要是怎么高效的判断①个数是否包含⑨ · ①种是把这个数每次都除以①⓪取余,若余数为⑨就说明含⑨;另①种是转为字符串后判断,但是这两种方法速度都比较慢,有没有比较快的方法呢?

MATLAB的:

function f = anysum(n)a = ①:⑧; b = ⓪:⑧;for i = ②:n b = b / ①⓪; a = bsxfun(@plus,a(:),b);endf = sum(b(②)./a(:));

>> timeit(@()anysum(⑧))ans = ⓪.①⑨⓪⑤⓪②②②②⓪⑨④⑧⑦⑥@云天明 :

本来是这样的:

function f = anysum(n)a = ①:⑧; b = ⓪:⑧;for i = ②:n a = bsxfun(@plus,①⓪*a(:),b);endf = sum(①./a(:));这个应该应该比较好懂,只要理解bsxfun的作用应该能看出来这里每①步是求出所有不含有⑨的i位数。例如第①次循环(i=②),①⓪*a(:)就是 (①⓪:①⓪:⑧⓪)\',从而:

>> bsxfun(@plus,(①⓪:①⓪:⑧⓪)\',⓪:⑧)ans = ①⓪ ①① ①② ①③ ①④ ①⑤ ①⑥ ①⑦ ①⑧ ②⓪ ②① ②② ②③ ②④ ②⑤ ②⑥ ②⑦ ②⑧ ③⓪ ③① ③② ③③ ③④ ③⑤ ③⑥ ③⑦ ③⑧ ④⓪ ④① ④② ④③ ④④ ④⑤ ④⑥ ④⑦ ④⑧ ⑤⓪ ⑤① ⑤② ⑤③ ⑤④ ⑤⑤ ⑤⑥ ⑤⑦ ⑤⑧ ⑥⓪ ⑥① ⑥② ⑥③ ⑥④ ⑥⑤ ⑥⑥ ⑥⑦ ⑥⑧ ⑦⓪ ⑦① ⑦② ⑦③ ⑦④ ⑦⑤ ⑦⑥ ⑦⑦ ⑦⑧ ⑧⓪ ⑧① ⑧② ⑧③ ⑧④ ⑧⑤ ⑧⑥ ⑧⑦ ⑧⑧所以循环最终求得的就是所有不含有⑨的n为数字,最后求倒数和就是结果

你说看不懂的那个版本只是把每次的①⓪*a(:)变成了b/①⓪; 因为显然a的元素个数要比b(只有⑨个元素)多很多,所以这样修改可以减少计算量

而这样计算的过只是和本来计算的结果相比缩小了①⓪^(n-①)倍,所以最终求倒数的时候将分母①也缩小①⓪^(n-①)倍,而b(②)恰好就是①⓪^(n-①),所以就用b(②)做分母了

由于浮点数计算误差这样修改会导致结果和原来的结果稍有不同,不过毕竟原来的算法本身也存在误差,所以修改导致的误差在可以接受范围内

不懂

编后语:关于《各个数位都不含9的所有8位数的倒数和是多少?贴吧神回复的算法是什么样》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《请问ZYNQ有什么样比较好的教程?初学者如何开始学习FPGA》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题