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

#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;                                           
}                                                       

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值