| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 654 人关注过本帖
标题:查无所获,请赐教!
只看楼主 加入收藏
浮云之冰雪
Rank: 2
等 级:论坛游民
帖 子:74
专家分:89
注 册:2013-5-11
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:8 
查无所获,请赐教!
/*回文质数  但输入123456 1123456时却无输出,
不知为何,望高手解答*/
#include"stdio.h"
int sushu(unsigned long int a)
{
    unsigned long int i;
    for(i=2;i<=a;i++)
        if(a%i==0)
            break;
        if(i==a)
            return 1;
        else
            return 0;
}
int huiwen(unsigned long int a)
{
    unsigned long int m,s,z=0;
    m=a;
    while(m)
    {
        s=m%10;
        m=m/10;
        z=z*10+s;
    }
    if(z==a)
        return 1;
    else
        return 0;
}
main()
{
    unsigned long int min,max;
    scanf("%ld %ld",&min,&max);
    if(min>=5&&min<max&&max<=100000000)
        for(min;min<=max;min++)
            if(sushu(min)&&huiwen(min))
                printf("%ld\n",min);
}
搜索更多相关主题的帖子: long include return 
2013-05-19 14:16
bccn新
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:57
专家分:144
注 册:2013-5-10
收藏
得分:5 
你的程序是找到回文质数就输出,如果123456和1123456之间没有回文质数当然就没有输出。
2013-05-19 16:08
YJ_Hao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:215
专家分:609
注 册:2013-3-22
收藏
得分:5 
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-05-19 16:11
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:5 
反应有点慢

Maybe
2013-05-19 19:47
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:5 
sushu函数修改一下可以很大加快运行速度。

程序代码:
#include <math.h>
int sushu(unsigned long int a)
{
    unsigned long int i,q;
    q = sqrt(a);
    for(i=2;i<=q;i++)
    {
    if(a % i==0)return 0;
    }
    return 1;
}


图中是速度比较

图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 apull 于 2013-5-19 21:02 编辑 ]
2013-05-19 21:01
浮云之冰雪
Rank: 2
等 级:论坛游民
帖 子:74
专家分:89
注 册:2013-5-11
收藏
得分:0 
回复 5楼 apull
这样的确快了许多,但如何更快呢?我想应该转变思维方式,以下是我的想法,然而初出茅庐,不能使其完美,望先生指点!
    /*回文素数*/
#include"stdio.h"
#include"math.h"
int sushu(long int n)
{
    long int i,flag;
    flag=1;
    for(i=2;i<=(int)sqrt(n);i++)
        if(n%i==0)
        {
            flag=0;break;
        }
    if(flag==1)
        return 1;
    else
        return 0;

}
/*先判断是否为回文数,若是则判断是否为素数,若是返回1*/
int huiwen(long int n)
{
    long int m,s,z=0;
    m=n;
    while(m)
    {
        s=m%10;
        m/=10;
        z=z*10+s;
    }
    if(z==n)
    {
        sushu(n);
        if(sushu(n))
            return 1;
        else
            return 0;   
    }
   
    else
        return 0;
}
main()
{
    long int min,max;
    scanf("%ld %ld",&min,&max);
    for(min;min<=max;min++)
        if(huiwen(min))
            printf("%ld\n",min);
}

潇洒不可少!
2013-05-24 09:14
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1506
专家分:9241
注 册:2010-3-16
收藏
得分:0 
这么做性能上会有一点提升。

其实只需要把
if(sushu(min)&&huiwen(min))
里面的顺序改一下
if(huiwen(min) && sushu(min))
当huiwen(min)的结果是0的话,&&后面的就会被忽略不进行计算的。因为0和任何数&&结果都是0.
2013-05-24 13:30
浮云之冰雪
Rank: 2
等 级:论坛游民
帖 子:74
专家分:89
注 册:2013-5-11
收藏
得分:0 
回复 8楼 ucai
拿了蓝桥杯的题来做,一道不会,明白自己还是菜鸟阶段,必须勤奋学习,先生之荐,如鱼得水,非常感谢!

潇洒不可少!
2013-05-25 18:01
快速回复:查无所获,请赐教!
数据加载中...
 
   



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

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