HDU 4548 미소 수

링크: http://acm.hdu.edu.cn/showproblem.php?pid=4548
미소 수: 자체 가 소수 이 고 여러분 의 숫자의 합 도 소수 입 니 다.
소수 표를 치고 여러분 의 숫자 에 대해 화 해 를 구하 고 소수 표를 방문 하여 여러분 과 소수 여 부 를 고찰 합 니 다.
코드 참조:
#include <iostream>
#include <cstring>
#define MAX 1000001
using namespace std;
bool prime[MAX];<span style="white-space:pre">	</span>//   
int ans[MAX];<span style="white-space:pre">	</span>//ans             
int for_sum(int n)<span style="white-space:pre">	</span>//      
{
    int sum=0;
    while(n)
    {
        sum+=n%10;
        n/=10;
    }
    return sum;
}
void pre()
{
    memset(prime,1,sizeof(prime));
    prime[0]=prime[1]=0;
    for(int i=2;i<MAX;i++)<span style="white-space:pre">	</span>//    
        if(prime[i])
            for(int j=i*2;j<MAX;j+=i)<span style="white-space:pre">	</span>// j=i*i,    __int64 j
                prime[j]=0;
    for(int i=1;i<MAX;i++) ans[i]=(prime[i] && prime[for_sum(i)]) ? 1 : 0;<span style="white-space:pre">	</span>//    ,          
    for(int i=1;i<MAX;i++) ans[i]+=ans[i-1];<span style="white-space:pre">	</span>//e.g ans[1]=0; ans[2]=ans[1]+ans[2]=1; ans[3]=ans[2]+ans[3]=2;
}
int main()
{
    pre();
    int T,n,m,k=1;
    cin>>T;
    while(T-- && cin>>n>>m)
        cout<<"Case #"<<k++<<": "<<ans[m]-ans[n-1]<<endl;
    return 0;
}

좋은 웹페이지 즐겨찾기