农夫约翰想从正整数AB之间选一些质数来作为奶牛的编号 ,并且作为编号的数各位上的数字至少有一个特定的数字D。如A为10、B为15、D为3时,AB之间有11、13两个素数,但组成11的两个数字中没有3,所以只有一个数13符合条件。
输入描述
一行三个正整数A、B、D,之间用一个空格隔开。 其中1<=A<=B<=4000000,B<=A+2000000,0<=D<=9
输出描述
一行一个正整数,表示包含数字D的质数个数
样例输入
10 15 3
样例输出
1
农夫约翰想从正整数AB之间选一些质数来作为奶牛的编号 ,并且作为编号的数各位上的数字至少有一个特定的数字D。如A为10、B为15、D为3时,AB之间有11、13两个素数,但组成11的两个数字中没有3,所以只有一个数13符合条件。
输入描述
一行三个正整数A、B、D,之间用一个空格隔开。 其中1<=A<=B<=4000000,B<=A+2000000,0<=D<=9
输出描述
一行一个正整数,表示包含数字D的质数个数
样例输入
10 15 3
样例输出
1
#include <stdio.h>
int prime[2000001], D, sum = 0;
bool vis[4000001];
int main() {
int A, B, cnt = 0;
int check(int);
scanf("%d%d%d", &A, &B, &D);
memset(vis, false, sizeof(vis));
for (int i = 2; i <= B; i++) {
if (!vis[i]) {
prime[cnt++] = i;
if (i >= A) sum = sum + check(i);
}
for (int j = 0; j < cnt && iprime[j] <= B; j++) {
vis[iprime[j]] = true;
if (i % prime[j] == 0) break;
}
}
printf("%d\n", sum);
return 0;
}
int check(int x) {
while (x) {
if (x % 10 == D) return 1;
x /= 10;
}
return 0;
}