| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1221 人关注过本帖
标题:c程序找不到bug,帮帮忙吧
只看楼主 加入收藏
MegJoe
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-11-8
结帖率:0
收藏
已结贴  问题点数:20 回复次数:17 
c程序找不到bug,帮帮忙吧
大神,求解释啊[e
写了一个列举超级素数的程序,1位数、2位数可以运行得到正确结果,3位数以后就不行了,这是为啥呢?
列举超级素数:如果一个位数为n的整数是素数,且它的前n-1,n-2,n-3,...,1个数字依次组成的整数均为素数,就称该整数是超级素数;
利用递归算法将位数为n的超级素数列举出来,例如7331就是位数为4的超级素数;每4个超级素数占一行。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int isPrime(int);//函数原型声明(判断一个数是否为素数,若是素数,返回1;若不是,返回0)
int getPrimeCount(int);//函数原型声明(一个n位数的前n-1,n-2,...,1位中素数的个数)
main()
{
    int length,i,j=0;
    printf("Please input an integer:");   
    scanf("%d",&length);
    for(i=pow(10,length-1);i<=(pow(10,length)-1);i++)
    {
        if(getPrimeCount(i)==length)
        {
            printf("%d\t",i);
            j++;
            if(j%4==0)
            printf("\n");
        }
    }
}
int isPrime(int n)//函数定义(判断一个数是否为素数,若是素数,返回1;若不是,返回0)
{
    int i;
    for(i=2;i<=n;i++)
    if(n%i==0) break;
    if(i>sqrt(n))
    return 1;
    else
    return 0;                       
}
int getPrimeCount(int n)//函数定义(一个n位数的前n-1,n-2,...,1位中素数的个数)
{
    if(n/10==0)
    return (isPrime(n));
    else
    return (isPrime(n)+isPrime(n/10));
}

[此贴子已经被作者于2015-12-8 00:56编辑过]

搜索更多相关主题的帖子: c程序 include 
2015-12-08 00:55
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
    2    3    5    7   23   29   31   37   53   59   71   73   79  233  239  293  311  313
  317  373  379  593  599  719  733  739  797 2333 2339 2393 2399 2939 3119 3137 3733 3739
 3793 3797 5939 7193 7331 7333 7393

这个结果对不

DO IT YOURSELF !
2015-12-08 08:51
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
程序代码:
#include <stdio.h>

bool isprime(int n)
{
    int i;
    int t=0;
    if(n==1) return false;
    for(i=2;i<=n;i++) if(n%i==0) t++;
    if(t>1) return false ; else return true;                       
}

bool getprime(int n)
{
    if(n==0) return true;
    if(isprime(n)==true) getprime(n/=10);else return false;
}

int main(void)
{
    for(int i=2;i<=10000;i++) if(getprime(i)==true) printf("%5d",i);
    return 0;
}


DO IT YOURSELF !
2015-12-08 08:52
ntprc0x
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:23
专家分:130
注 册:2015-11-14
收藏
得分:5 
楼主: 利用递归算法   楼主你的递归呢?
还有1是素数吗 看一下 isPrime(1)
程序代码:
int getPrimeCount(int n)
{
    if(n/10==0)
    return (isPrime(n));
    else
    return (isPrime(n)+getPrimeCount(n/10));
}     
2015-12-08 11:22
MegJoe
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-11-8
收藏
得分:0 
回复 4楼 ntprc0x
int getPrimeCount(int n)
这个函数就勉强算递归呗?
2015-12-08 13:30
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 6楼 边小白
1是不是素数?

DO IT YOURSELF !
2015-12-08 15:19
情.难言ゝ
Rank: 3Rank: 3
来 自:安徽安庆
等 级:论坛游侠
威 望:1
帖 子:74
专家分:137
注 册:2013-9-8
收藏
得分:5 
回复 2楼 wp231957
11应该也是素数啊

树叶的离去,是风的追求、还是树的不挽留???
2015-12-08 15:26
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 6楼 边小白
修改了一下  把1也剔除的话

10000以内 有以下 :
 2    3    5    7   23   37   53   73  233  373  733 2333 3733 7333
100000以内 有以下:
 2    3    5    7   23   37   53   73  233  373  733 2333 3733 37337
1000000以内有以下:
算法太弱 100w 半天算不出来

DO IT YOURSELF !
2015-12-08 15:26
crystone
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:45
专家分:183
注 册:2015-11-26
收藏
得分:0 
以下是引用边小白在2015-12-8 15:31:45的发言:

这都可以百度的
首先1既不是素数,也不是合数。但在超级素数里,人们通常又把个位数为1的作为超级素数。

不懂别瞎说
2015-12-08 15:33
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
到底什么是超级素数:

比如 楼主举例7331   是 7 73 733 7331 都是素数 就构成超级素数
                  还是 1 31 331 7331 都是素数 就构成超级素数

DO IT YOURSELF !
2015-12-08 15:44
快速回复:c程序找不到bug,帮帮忙吧
数据加载中...
 
   



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

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