算法-对于数列an = c1*n+c2, c1和c2为正整数,如何判断an中是否存在3的倍数?

发布于 2017-01-08 20:20:47 字数 36 浏览 1060 评论 1

如果存在的话,能否求出an中所有小于给定的数N的3的倍数?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

偏爱自由 2017-01-22 23:43:23

设c1=3w+x, c2=3y+z, 其中w、y为任意非负整数,x、z为0、1或2
那么:an = c1 * n + c2 = 3nw + nx + 3y + z
问an能否被3整除,等同于问f(n)=nx+z能否被3整除

1 当z=0(即c2能被3整除)时:只要n取任意3的倍数,结果都能被3整除(当c1也能被0整除是,n可以取任意的整数)
2 z!=0且x=0(即c1能被3整除,c2不能)时,f(n)恒等于z,不可能被3整除
3 z!=0且x!=0(c1、c2都不能被3整除)时,
3.1 当x=z时: (nx + z) mod 3 = (n+1)x mod 3,只要n取3的倍数减1即可保证被3整除
3.2 当x!=z,可得x+z=3,那
(nx+z) mod 3 = (nx + 3 - x) mod 3 = ((n-1)x + 3) mod 3
,只要n取3的倍数加1即可保证被3整除

-------------------------我是华丽的分割线--------------------------
综合上述内容,只要c1不能被3整除,或者c2能被3整除时,an都存在3的倍数

至于“如果存在的话,能否求出an中所有小于给定的数N的3的倍数”,可以根据上述推论中n的取值方式,自己推算或者写程序输出,这里就不写了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文