| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 456 人关注过本帖
标题:请大家帮我优化下程序执行的效率我想了好久
取消只看楼主 加入收藏
dreamsea
Rank: 2
等 级:论坛游民
帖 子:25
专家分:24
注 册:2009-10-25
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:0 
请大家帮我优化下程序执行的效率我想了好久
题目要求是要输入一个a到b的范围(5<=a<b<=1000000000)输出所有在这范围内的回文素数(即这个数既是回文数又是素数)我编的程序如下(用code blocks编的)虽然结果正确但是效率太低  大家能帮我想想更高效的方法吗?谢谢了(最好解释下 我是初学者)

#include <stdio.h>
#include <math.h>
#include "mymath.h"/*自定义的头文件*/

int main()
{
    long int a, b, i, prime, Palindrome;

    printf("please input the range of the integer\nplease use space to separate\n");/*提示用户输入2个数字*/
    scanf("%ld %ld", &a , &b);/*输入所求回文素数的范围*/
    if (a % 2 == 0)
        a++;
    for (i = a; i <= b; i = i + 2)/*从a到b依次对数字进行检验*/
    {

        Palindrome = HuiWen(i);/*把prime倒过来写*/
        if (Palindrome == i)/*判断i是否为回文数*/
        {
            prime = SuShu(i);/*若i是素数则赋值给prime*/
            if (prime != 0)/*判断是否为素数*/
                printf("%ld\n", prime);/*输出回文素数*/
        }
    }
    return 0;
}

头文件是:
#ifndef MYMATH_H_INCLUDED
#define MYMATH_H_INCLUDED
/*函数功能:  判断给定的数是否为素数
  函数参数入口: 长整型x
  返回值:若x的是素数则为x,若x不是素数则为0 */
long int SuShu(long int x)
{
    long int count = 0, n, q;
    q = sqrt(x);
    if (x != 2 && x % 2 != 0)
    {
        for (n = 3; n <= q; n += 2)
        {
            if (x % n == 0)
                goto there;
        }
    }
    else
        goto there;
    return x;
there :
    return 0;
    count = 0;
}



/*函数功能: 把输入的数字从右往左输出
  函数参数入口: 长整型n
  函数返回值: 对应从右往左的数的值*/
long int HuiWen(long int n)
{
    long int right = 0, left = n;

        while (left> 0)
        {
            right = right * 10 + left % 10;
            left /= 10;
        }

    return right;
}


#endif // MYMATH_H_INCLUDED
搜索更多相关主题的帖子: 效率 
2009-11-01 19:32
快速回复:请大家帮我优化下程序执行的效率我想了好久
数据加载中...
 
   



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

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