标签:++ 素数筛选法 [1] cep return class memory -- font
给定一个区间,你能计算出这个区间内有多少个美素数吗?
每组数据占一行,详细输出格式參见例子。
3 1 100 2 2 3 19
Case #1: 14 Case #2: 1 Case #3: 4
#include <iostream> #include <cstdio> #include <cstring> using namespace std; bool prime[1000001]; bool beauty[1000001]; int dp[1000001]; void findprime() { memset(prime,true,sizeof(prime)); memset(beauty,true,sizeof(beauty)); prime[0]=prime[1]=false; beauty[0]=beauty[1]=false; for(int i=2;i<=1000;i++) //素数筛选法核心代码区 { for(int j=2*i;j<=1000000;j+=i) { prime[j]=false; beauty[j]=false; } } //素数筛选法核心代码区 } void beautyprime() { int sum,k; for(int i=2;i<=1000000;i++) { sum=0;k=i; if(prime[i]==true) { while(k!=0) { sum+=k%10; k/=10; } if(prime[sum]!=true) { beauty[i]=false; } } } } void DP() //动态规划思想,dp[i]即1到i素数的个数 { memset(dp,0,sizeof(dp)); for(int i=1;i<=1000000;i++) { if(beauty[i]==true) { dp[i]=dp[i-1]+1; } else dp[i]=dp[i-1]; } } int main() { int a,b,T,_count; findprime(); beautyprime(); DP(); while(scanf("%d",&T)!=EOF) { _count=0; while(T--) { _count++; scanf("%d%d",&a,&b); printf("Case #%d: %d\n",_count,dp[b]-dp[a-1]); } } return 0; }
标签:++ 素数筛选法 [1] cep return class memory -- font
原文地址:http://www.cnblogs.com/mthoutai/p/7088453.html