| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 572 人关注过本帖
标题:有关素数的综合运用问题
取消只看楼主 加入收藏
hcjiaozhi
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2010-10-11
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:5 
有关素数的综合运用问题
我想找出同时满足超级素数、逆向超级素数和金蝉素数这三个条件的素数,模仿别人的程序,自已写了一个,但未成功,如下,请高手改一改,谢谢!

#include<stdio.h>

int prime(int x)
{
    int i,j=1;
    if(x==0||x==1)j=0;
    else
        for(i=2;i<x;i++)
        {
            if(x%i==0)
            {
                j=0;
                break;
            }
        }
        return j;
}

int cjss(int x)   /*此函数判断一个数是否它本身为素数且从个位开始依次去掉一位数字后仍为素数*/
{
    if(x<10)
    {
        if(prime(x)==1)return 1;else return 0;
    }
    else if(x<100)
    {
        if(prime(x)==1&&prime(x/10)==1)return 1;else return 0;
    }
    else if(x<1000)
    {
        if(prime(x)==1&&prime(x/10)==1&&prime(x/100)==1)return 1;
        else return 0;
    }
    else if(x<10000)
    {
        if(prime(x)==1&&prime(x/10)==1&&prime(x/100)==1&&prime(x/1000)==1)
            return 1; else return 0;
    }
}

int ncjss(int x)   /*此函数判断一个数是否它本身为素数且从高位开始依次去掉一位数字后仍为素数*/
{
    if(x<10)
    {
        if(prime(x)==1)return 1;else return 0;
    }
    else if(x<100)
    {
        if(prime(x)==1&&prime(x%10)==1)return 1;else return 0;
    }
    else if(x<1000)
    {
        if(prime(x)==1&&prime(x%10)==1&&prime(x%100)==1)return 1;
        else return 0;
    }
    else if(x<10000)
    {
        if(prime(x)==1&&prime(x%10)==1&&prime(x%100)==1&&prime(x%1000)==1)
            return 1; else return 0;
    }
}

int jcss(int x)   /*此函数判断一个数是否它本身为素数且从两头开始同时、依次去掉一位数字后仍为素数*/
{
    if(x<1000)
    {
        if(prime(x)==1&&prime(x%10)==1&&prime(x/10)==1)return 1;
        else return 0;
    }
    else if(x<10000)
    {
        if(prime(x)==1&&prime(x%100)==1&&prime(x/100)==1)
            return 1; else return 0;
    }
}

void main()
{
    int i,count=0;
    printf("同时满足超级素数、逆向超级素数和金蝉素数这三个条件的素数有:\n");
    for(i=100;i<=10000;i++)
    {
        if(prime(i)==1 && cjss(i)==1 && ncjss(i)==1 && jcss(i)==1)
        {
            count++;printf("%d\t",i);if(count%10==0)printf("\n");
        }
    }
}
图片附件: 游客没有浏览图片的权限,请 登录注册

313,317,797不是金蝉素数。

[ 本帖最后由 hcjiaozhi 于 2013-4-22 22:44 编辑 ]
搜索更多相关主题的帖子: include return 
2013-04-22 22:41
hcjiaozhi
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2010-10-11
收藏
得分:0 
回复 2楼 azzbcc
哦,明白了,应该是:
 if(x<1000)
    {
        if(prime(x)==1&&prime(x/10%10)==1)return 1;
        else return 0;
    }
    else if(x<10000)
    {
        if(prime(x)==1&&prime(x/100%10*10+x/10%10)==1)
            return 1; else return 0;

运行成功!如下图:
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 hcjiaozhi 于 2013-4-23 19:59 编辑 ]
2013-04-23 12:54
hcjiaozhi
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2010-10-11
收藏
得分:0 
再次感谢azzbcc版主!!
我的算法比较笨,不知哪位高手有更好更快的算法!请分享,先谢谢了!

[ 本帖最后由 hcjiaozhi 于 2013-4-23 20:00 编辑 ]
2013-04-23 12:59
hcjiaozhi
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2010-10-11
收藏
得分:0 
回复 5楼 azzbcc
是啊,若能更灵活些就好了!比如,不受<10000的限制(我的代码只能算10000以内的)。希望找到实现我说的三个条件的更好方法(数值范围可更大些)!
感谢版主azzbcc赐教!

[ 本帖最后由 hcjiaozhi 于 2013-4-23 13:22 编辑 ]
2013-04-23 13:18
hcjiaozhi
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2010-10-11
收藏
得分:0 
关键问题就是“找出更好的判断超级素数、逆向超级素数、金蝉素数算法”
2013-04-23 13:31
hcjiaozhi
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2010-10-11
收藏
得分:0 
8楼、9楼提出的思路很好很实用!可以结贴了!再次感谢azzbcc版主!!
2013-04-23 19:53
快速回复:有关素数的综合运用问题
数据加载中...
 
   



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

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