免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4989 | 回复: 14
打印 上一主题 下一主题

[算法] 求满足1~100内任意数相减绝对值为素数个数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-24 20:47 来自手机 |只看该作者 |倒序浏览
如题,请问总得个数有多少?
小弟c还入门,就请用c编写吧!

论坛徽章:
0
2 [报告]
发表于 2012-10-24 20:49 来自手机 |只看该作者
补充下,应该说最多的个数

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
3 [报告]
发表于 2012-10-24 21:38 |只看该作者
本帖最后由 Ager 于 2012-10-24 23:34 编辑


一行命令:
$ perl -e "map{my \$i=\$_;map{my \$j=abs(\$_-\$i);print qq~ABS(\$_-\$i)=~.\$j.qq~: PRIME\!\n~ if((1 x \$j)\!~/\^(11+)\1+\$/)&&(\$j\!~/\^[01]\$/)}(1..100);}(1..100);"


论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
4 [报告]
发表于 2012-10-24 23:03 |只看该作者
进来只是想说:作业题,还是要亲历亲为。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
5 [报告]
发表于 2012-10-25 03:49 |只看该作者
本帖最后由 starwing83 于 2012-10-25 05:52 编辑

回复 3# Ager


    你自己说,像不像乱码。

write-only语言,名不虚传啊

顺便说一下,我觉得python版本的似乎更短一点:



一行命令
$ python -c"r=range(1,101);print[(i, j)for i in r for j in r if abs(i-j)in[2]+[x for x in r if 2**x%x==2]]"


论坛徽章:
0
6 [报告]
发表于 2012-10-25 11:21 |只看该作者
这是一个数学问题,我偶然也看到过。个人基本思路:
令 A = {x | x >= 1 && x <= 100}; B = {y | y >= 1 && y <= 100}
则 |x - y|  =  C  = {z | z >= 0 && z <= 99};
那么求解问题的思路就出来了,即从2-99里找出所有的素数。(1既不是合数也不是素数)

论坛徽章:
0
7 [报告]
发表于 2012-10-25 17:30 |只看该作者
回复 5# starwing83


    py个人不懂,可是好像你看错题目了吧,问的是,满足任意两数相减为素数,求的是减数与被减数而不是值。
比如1~10,满足任意两数相减为素数的数最多为3个,分别为 1、4、6,(4-1=3,6-4=2,6-1=5)

论坛徽章:
0
8 [报告]
发表于 2012-10-25 17:31 |只看该作者
回复 3# Ager


    可是好像你看错题目了吧,问的是,满足任意两数相减为素数,求的是减数与被减数而不是值。
比如1~10,满足任意两数相减为素数的数最多为3个,分别为 1、4、6,(4-1=3,6-4=2,6-1=5)

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
9 [报告]
发表于 2012-10-25 17:37 |只看该作者
本帖最后由 starwing83 于 2012-10-25 17:38 编辑

回复 8# rookieljw


     = =我照着那位写的……得到我们的结果,基本上在这个结果集合里面求一个最大等价集就可以了似乎……

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
10 [报告]
发表于 2012-10-25 20:04 |只看该作者
回复 8# rookieljw


    我擦,被耍了!!!我写了三个多小时……

先开始出现一个很奇怪的现象,我写出来的程序求出的最大连通分量最大只有4。

我觉得很奇怪,就反着研究了一个倒推算法,还是只有4.

然后我开始觉得不对劲了,于是就证明了一下!!可以证明,如果有N个数字两两相减为素数,那么N最大不可能超过4!

可以这么想,假设N>=5,就设N为5好了,那么最小的五个数字分别为N1,N2,N3,N4,N5。我们假设他们单调上升,即最小的数字是N1,最大的是N5。

由定义可知,
P21 = N2 - N1
P32 = N3 - N2
P31 = N3 - N1

即相邻的三个数字相减绝对值必须为质数,这是题目规定。我们将这三个式子变形,很容易得:

P21 + P32 = P31

即,三个数字之间,必定要有两个素数之和等于第三个素数。首先我们假设这三个素数中不存在2,那么显然这是不可能的:因为两个奇数相加为偶数,而素数中为偶数的只有2.

那么可知,在得到的序列里,每三个数字之间的两个差必定有一个是2。

现在我们说明在这种情况下,差素数的数量不可能大于3,假设数量大于3,则意味着:
P21 + P32 = P31
P21 + P32 + P43 =  P41
P21 + P32 + P43 + P54 = P51

注意这三组式子,我们可以得知,P31一定是奇数,那么P43必定是2——否则P41一定是合数。也就是说:
P21 + P32 + P43 + P54 = P51
2 + P32 + 2 + P54 = P51
P32 + 4 + P54 = P51
注意!P32一定不是2,否则P31就是4不是素数。同理P54同样不可能是2,那么可知P32和P54都是奇数,那么P51就只可能是合数,由此可知,P51必定不存在。

即,满足要求的素数数量,最多只可能有3个,即,满足要求的数组集合,其最大大小只可能有4个!

我擦啊……你这不是耍人么?


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP