网站首页 > 教程分享 正文
引言
今日头条看视频,求=4391。用了一种有趣的整除7碾转算法,分享给各位小伙伴,同时给出#数学#证明和C代码#程序#实现。
算法描述
设十进制整数为n,
(1)判定n是否被7整除;
(2)如果能判定,则得出结论,否则到步骤3;
(3)将n的末尾数(设为m)与其他数(设为r)分离,得到m和r。
(4)用m和r求得新数x, 公式为x = r - 2m。
(5)回到步骤1,判定x。
例子
举例说明。试试1414。假设我们不能一眼看得出结论,那么尝试用上述算法。
(1)将末尾数分离,得到141和4。然后前者减去后者的两倍,即141 - 8,为133。
(2)如果能判断出是否被7整除,则得出结论。这里133还不明显的话,则重复上述步骤。
(3)将133截取末尾数,得到13和3。 13 - 3 X 2 = 7。 显然7能被7整除,
于是得出结论,1414能被7整除。
再来一个例子,1234。
123 - 4 X 2 = 115。 11 - 2X5 = 1。1不能被7整除,因此1234不能被7整除。
数学证明
设十进制整数n表示为r和m,使得 n = 10r + m。
有10r + m = 7r + 7m + 3r - 6m = 7(r+m) + 3(r - 2m)
由此,n是否被7整除,转换为检查7(r+m) + 3(r-2m)是否被7整除。显然,7(r+m)被7整除,那么,r-2m决定了是否能被7整除,假如r-2m能被7整除,则n被7整除,反之,r-2m不被7整除,则n不被7整除。
证毕。
C代码
#include <assert.h>
bool is_divided_by_7(int n) {
if (n < 0) n = -n;
while (n > 10) {
int r = n / 10;
int m = n - 10 * r;
m = m << 1;
n = r - m;
}
return n == 0 || n == 7;
}
int main() {
assert(is_divided_by_7(1414));
assert(!is_divided_by_7(1234));
assert(is_divided_by_7(7));
assert(!is_divided_by_7(1));
assert(is_divided_by_7(0));
assert(is_divided_by_7(21));
assert(!is_divided_by_7(23));
return 0;
}
结束
猜你喜欢
- 2024-10-18 信号 - Linux Signal - 网络编程的相关信号
- 2024-10-18 干货 | 一文搞定 pytest 自动化测试框架(一)
- 2024-10-18 linux网络编程—tcp和udp基本函数调用过程及如何选择
- 2024-10-18 C语言之结构体基础(c语言结构体经典例题)
- 2024-10-18 linux定时器编程详解(包含代码)(linux定时器执行脚本)
- 2024-10-18 C语言学习第16篇---三目运算符和逗号表达式
- 2024-10-18 Linux网络编程相关高级I/O函数 - 用于创建文件描述符的函数
- 2024-10-18 干货 | 一文搞定 pytest 自动化测试框架(二)
- 2024-10-18 现代c++之移动构造,移动赋值,拷贝构造,拷贝赋值
- 2024-10-18 探索C语言断言:保证程序的健壮性和可靠性
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)