庞果网-在线编程挑战 幸运数 简单数论.......

#include <string>                                       

#include <stdio.h>                                      

#include <cmath>                                        

#include <iostream>                                     

using namespace std;                                    

bool flag[800];                                         

void primmake()          //使用筛选法构造素数表                               

{                                                       

    memset(flag,0,sizeof(flag));                        

    flag[1]=1;                                          

    for(int i=2;i<=800;i++)                             

    {                                                   

        if(!flag[i]){                                   

            for(int j=2;i*j<=800;j++)flag[i*j]=1;       

        }                                               

    }                                                   

}                                                       

int sumdigit(int x){                                    

    int sum=0;                                          

    while(x){                                           

        sum+=x%10;                                      

        x/=10;                                          

    }                                                   

    return sum;                                         

}                                                       

int sqdigit(int x){                                     

    int sum=0;                                          

    while(x){                                           

        sum+=(x%10)*(x%10);                             

        x/=10;                                          

    }                                                   

    return sum;                                         

}                                                       

bool luck(int x){                                       

    int sum0=sumdigit(x);                               

    int sum1=sqdigit(x);                                

    if(!flag[sum0] && !flag[sum1])return 1;             

    return 0;                                           

}                                                       

int lucky(int x,int y) {                                

    int cnt=0;                                          

                                                        

    for(int i=x;i<=y;i++){                              

        if(luck(i))cnt++;                               

    }                                                   

    return cnt;                                         

}                                                       

//start 提示:自动阅卷起始唯一标识,请勿删除或增加。    

int main()                                              

{                                                       

    //main函数方便你自行测试,可不用完成                

    primmake();                                         

    cout<<lucky(1,20)<<endl;                            

    return 0;                                           

}                                                       


你可能感兴趣的:(编程)