标题:素数的划分
只看楼主
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 20楼 九转星河
给自己的数据增加了一下说服力,不过这个程序证明其准确性感觉很困难啊

不知道还有没有问题???


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-17 00:43
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
看题目要求好象是只要得出一种切割法就可以。
如果要得出所有的切割法呢?

[此贴子已经被作者于2016-12-17 06:05编辑过]

2016-12-17 06:02
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 22楼 吹水佬
这个用栈依然可以实现,只是实现的终点必然是栈走到头,如果数据能走到栈尾,则另外用栈保留成立的数据就行了~
不过由于不知道成立的个数,用链栈保留较好。

用两个栈,顺序栈遍历,链栈保留成立数据~

[此贴子已经被作者于2016-12-17 10:33编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-17 10:20
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:10 
下午要陪闺蜜再过一次CET6(去年过了的,只是今年想能提点分,反正才30元报名费),复习的头分眼花!码下代码提提神!
向来崇尚代码简洁精炼优美,那种弃简就繁或用指针指来指去的算法我一般不考虑!在代码优美精炼简洁方面确有几个大神是我学习的楷模!废话不说,上完代码继续复习,敬请大神指教!
程序代码:
#include <stdio.h>
int isprime(char* s,int sp,int len)
{//取出串s指定开始位置sp处长度为len的数字转换为整数并判断是否为素数
    int i,j;
    for(i=0,j=0;i<len;i++)j=j*10+s[i+sp]-'0';
    for(i=2;i*i<=j&&j%i;i++);
    return j>1&&i*i>j;
}
int fun(char *s,int start)
{
    int i,j,k;
    if(!s[start])return 1;
    for(i=6;i;i--)  //倒着分割可以尽量使分割的次数减少,每次都获取一个最大的素数
    {
        j=0;
        if(isprime(s,start,i))j=fun(s,start+i);
        if(j)
        {
            for(k=0;k<i;k++)printf("%c",s[start+k]);
            printf(",");
            return 1;
        }
    }
    if(!start)printf("无法进行全部的素数分割!");
    return 0;
}
void main()
{
    char s[]="1447160917891993";
    //char s[]="1111111111111111111111131";
    //char s[]="14471609178919938";
    fun(s,0);
    printf("\n");
}
收到的鲜花
  • 九转星河2016-12-17 12:12 送鲜花  10朵   附言:我很赞同
2016-12-17 11:04
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 24楼 xzlxzlxzl
这样考虑的话……的确会变得简单很多,但验证其准确性难度不小~你可以试下解22楼的发问,看看你这个算法能不能实现

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-17 11:33
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:0 
回复 20楼 九转星河
2016-12-17 11:40
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 24楼 xzlxzlxzl
刚才用素数表里面的人为的特殊数发现这题也是有退栈的现象的,只不过比16楼退栈的现象少~

通过这条题,怎么感觉递归和栈有相通之处要好好学习一下才行


[此贴子已经被作者于2016-12-17 12:57编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-17 12:11
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
刚才16楼打印素数表发现了一个小bug,for (j=i;j+i<1000000;j+=i)//应该改为for (j=i;j<1000000;j+=i)//已修复

[此贴子已经被作者于2016-12-17 12:59编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-17 12:16
搬砖
Rank: 2
等 级:论坛游民
帖 子:68
专家分:37
注 册:2016-10-13
得分:0 
回复 24楼 xzlxzlxzl
谢谢姐姐
2016-12-17 13:59
搬砖
Rank: 2
等 级:论坛游民
帖 子:68
专家分:37
注 册:2016-10-13
得分:0 
回复 27楼 九转星河
也感谢大佬的回答
2016-12-17 14:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-472482-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.216429 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved