这段代码的功能是什么?

djjlove_2008 2010-05-18 02:50:25
#include <iostream>

using namespace std;

int main()
{
int rg[] =
{2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};

for(long i = 1; ; ++i)
{
int hit = 0;
int hit1 = -1;
int hit2 = -1;
for(int j = 0; j <= 31 && hit <= 2; j++)
{
if(i % rg[j] != 0)
{
hit++;
if(hit == 1)
{
hit1 == j;
}
else if(hit == 2)
{
hit2 = j;
}
else
break;
}
}

if(hit == 2 && hit1 + 1 == hit2)
{
cout << "found {0}" << i << endl;
break;
}
}

system("pause");
return 0;
}
这段代码是要找一个符合什么条件的数呢?这个数会存在不,而最小的数是什么了?
...全文
239 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
djjlove_2008 2010-05-30
  • 打赏
  • 举报
回复
谢谢各位了。
djjlove_2008 2010-05-28
  • 打赏
  • 举报
回复
good idea....
symnphrost 2010-05-19
  • 打赏
  • 举报
回复
mark
下课了 下午来看看
mygod343434 2010-05-19
  • 打赏
  • 举报
回复
9楼的例子是对的,我的证明确实错了,不知道谁能给个对的。。。
matrixcl 2010-05-18
  • 打赏
  • 举报
回复
假设存在一个数M,能整除2到31中除N和N+1之外的所有数。
那么N一定大于15. 否则因为M能整除2N,所以也能整除N,矛盾。

2 = 2
3 = 3
4 = 2(^2)
5 = 5
6 = 2*3
7 = 7
8 = 2(^3)
9 = 3(^2)
10 = 2*5
11 = 11
12 = 3*2(^2)
13 = 13
14 = 2*7
15 = 3*5
16 = 2(^4)
17 = 17
18 = 2*3(^2)
19 = 19
20 = 5*2(^2)
21 = 3*7
22 = 2*11
23 = 23
24 = 3*2(^3)
25 = 5(^2)
26 = 2*13
27 = 3(^3)
28 = 7*2(^2)
29 = 29
30 = 2*3*5
31 = 31

最高质数次数为2(4), 3(3), 5(2), 7(1), 11(1), 13(1), 17(1), 19(1), 23(1), 29(1), 31(1)

拥有最高次数者为16, 27, 7/14/21/28, 11/22, 13/26, 17, 19, 23, 29, 31.

7/14/21/28, 11/22, 13/26这3租可以排除,因为每组中的任意数都可以由改组最小的数和一个16以内的数相乘得到(如21 = 7 * 3),而最小数又小于16。

因此在16, 27, 17, 19, 23, 29, 31中选相邻数,只有16、17.
除16、17之外的质数最高次数为2(3), 3(3), 5(2), 7(1), 11(1), 13(1), 17(0), 19(1), 23(1), 29(1), 31(1)
相乘 M = 8*27*25*7*11*13*19*23*29*31
matrixcl 2010-05-18
  • 打赏
  • 举报
回复
先说结论,最小的满足条件的数是:
8*27*25*7*11*13*19*23*29*31 = 2,123,581,660,200 超出整数范围了

UnLoop 2010-05-18
  • 打赏
  • 举报
回复
户田MM
matrixcl 2010-05-18
  • 打赏
  • 举报
回复
代码有2处错误:
1. j<=29; Not j<=31
2.
if(hit == 1)
{
hit1 = j; Not hit1 == j;
}

7楼说的比较全了,代码的作用是寻找一个数,它能整除2-31这30个数中的28个。剩下的2个不能整除的数相邻。

这个数应该是不存在的。
onefreeday 2010-05-18
  • 打赏
  • 举报
回复
下面2处应该是错误的
for(int j = 0; j <= 31 && hit <= 2; j++) //j<=31 下面的数组会越界
{
if(i % rg[j] != 0)
{
hit++;
if(hit == 1)
{
hit1 == j; //hit1=j 吧 要不然真不知道是什么意思了
}
else if(hit == 2)
{
hit2 = j;
}
else
break;
}

本人数学很烂 拿不出理论上的证明 只能举例了

int rg[]={2,3,4,5,6,7,8,9,10};
for(int j = 0; j <= 8 && hit <= 2; j++)
//运行结果是 180
//180 不能整除 7 和 8

所以结果是


分析看5楼
5楼是对的


1楼错了
2楼也错了
2个数不一定恰恰是最后2个数

7楼的证明错了吧

存在不存在 还没有结论
孙立人315 2010-05-18
  • 打赏
  • 举报
回复
最小公倍数
mygod343434 2010-05-18
  • 打赏
  • 举报
回复
不能被整除的数一定是素数,因为若是非素数的话,也能整除素数,必然不会只有2个不能被整除。
那么2~31中只有2,3是相邻的素数,但是能整除4~32的数却又不能整除2,3的数是不存在的,所以这个数是不存在的。
mygod343434 2010-05-18
  • 打赏
  • 举报
回复
for(int j = 0; j <= 31 && hit <= 2; j++)
顺便说一下,这个j应该<=29吧,只有30个数
mygod343434 2010-05-18
  • 打赏
  • 举报
回复

for(int j = 0; j <= 31 && hit <= 2; j++)
//这一个循环中跳出的条件为j > 31或者是hit > 2,而下面输出的条件又要求hit == 2,所以只有
//在j > 31的时候有可能跳进输出语句中,所以i一定要满足能整除2~31这30个数中的28个,刚好两个
//不能整除hit才会等于2。
if(hit == 2 && hit1 + 1 == hit2)
//这句判断语句中还有一个条件是hit1+1 == hit2,从以下语句
if(hit == 1)
{
hit1 == j;
}
else if(hit == 2)
{
hit2 = j;
}
//可以得出不能被整除的两个数必定是相邻的。
//所以要找的数就是能整除2~31这30个数中的28个(且2个不能被整除的数是相邻的)的那个数
wade_2003 2010-05-18
  • 打赏
  • 举报
回复
顶1楼
Beyond_cn 2010-05-18
  • 打赏
  • 举报
回复
学习。。
onefreeday 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 onefreeday 的回复:]

rg[]里 所有数的公倍数
[/Quote]
错了 是最小公倍数
onefreeday 2010-05-18
  • 打赏
  • 举报
回复
rg[]里 所有数的公倍数
    本课程分享对由中国开发者提供的OpenCV条形码识别模块的原理和代码精讲。该模块借鉴“目标识别”领域先进理念,采用“定位-识别”二段模式,有效提高了自然环境下条码识别的准确率并保持了C++代码的高速度,相比较常用的zxing和zbar在准确率和识别速度上均有较大优势。更难得可贵的是在代码的实现过程中能够注意细节,在诸如“循环测试确定参数数值”“积分图的使用”“倾斜矩形纠偏”等处,均提供了思路清晰、弹性高的优质代码。作为一套通过了OpenCV官方的代码检验、解决一个常用领域内具体问题的模块,对于图像处理学习来说是难得可贵的。    逐条进行代码解读繁琐且低效,个人认为,在图像处理领域,能够运行和修改观察的代码对于学习研究至关重要。在理论剖析部分,也是由应用引导原理。同时做好知识的迁移和代码的复用工作。在这个过程中,创建针对性的实验非常重要。 课程内容分为4个部分:一是基本配置,包括· 条形码识别模块的安装使用 (cmake配置和OpenCV编译);· 构建用于测试和代码阅读的环境;· 模块对官方数据集的测试;二是条码定位,将详细讲解思路、原理和实现知识迁移部分将简单说一下在毛发识别上的迁移:三是条码识别,该部分内容会首先梳理框架,而后具体进行分析讲解    此外,我们将结合例子,将OpenCV的基础功能,包括积分图像、形态学变化、联通区域、透视变化等进行复习,加深理解。 

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧