日期:2014-05-16  浏览次数:20712 次

C语言简单算法--看来的,我是搞不定啊。。。
题目详情
如果一个数各个数位上的数字之和是质数,并且各个数位上的数字的平方和也是质数,则称它为幸运数。
给定x,y,求x,y之间( 包含x,y,即闭区间[x,y])有多少个幸运数。

例如1到20之间有4个幸运数,它们是11,12,14,16,像因为1+1 = 2是质数,1^2 + 1^2 = 2也是质数等等。
给定函数原型,其中1<=x<=y<=1000000000,请完成函数,实现上述功能。

答题说明
运行时间限时3秒。
算法 C

------解决方案--------------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int CheckIsP(int aNum)
{
    if (aNum == 2)
    {
        return 1;
    }

    if (aNum == 1)
    {
        return 0;
    }

    int i;
    for (i=2;i<aNum;i++)
    {
        if ((aNum % i) == 0)
        {
            return 0;
        }

        if (i >= (aNum / 2))
        {
            break;
        }
    }
    return 1;
}

int CheckNUM(int aNum)
{
    int NumDigCount;
    char pNum[20];
    itoa(aNum,pNum,10);
    NumDigCount = strlen(pNum);

    int i,tmpDig;
    int DigSum=0;
    int DigSqSum=0;
    for (i=0;i<NumDigCount;i++)
    {
        tmpDig = pNum[i] - '0';
        DigSum += tmpDig;