6 条题解
- 
  -1
数据有点大,筛质数要快
如果你还在用这个朴素算法:
bool su(int x) { for(int i = 2; i * i <= x; i++) { if(x % i == 0) { return 1; } } return 0; }
听取TLE声一片
prime:
有点耳熟bool prime[N]; void prime_find(int x) { prime[1] = 1; for(int i = 2; i * i <= x; i++) { if(prime[i] == 0) { for(int j = i * i; j <= m; j += i) { prime[j] = 1; } } } }
峰值时间38ms,跑得飞快
最后放上完整代码
#include <iostream> #include <stack> #include <cmath> #include <vector> #include <string.h> #include <queue> #include <stdio.h> #include <iomanip> #include <cstdio> #include <algorithm> #define int long long using namespace std; const int N = 4e6 + 10;//<- const int INF = 0x3f3f3f3f; int n, m, k; bool prime[N];//筛素数 void prime_find(int x) { prime[1] = 1; for(int i = 2; i * i <= x; i++) { if(prime[i] == 0) { for(int j = i * i; j <= m; j += i) { prime[j] = 1; } } } } signed main() { cin >> n >> m >> k; prime_find(m); if(n % 2 == 0) { n++;//微调,避免是偶数 } int ans = 0; for(int i = n; i <= m; i += 2)//两个两个加 { if(prime[i] == 0)//是素数 { int sum = i; while(sum)//分离数位 { int l = sum % 10; if(l == k) { ans++; break; } sum /= 10; } } } cout << ans << endl; return 0;//完结撒花 } 
信息
- ID
 - 975
 - 时间
 - 1000ms
 - 内存
 - 128MiB
 - 难度
 - 6
 - 标签
 - 递交数
 - 453
 - 已通过
 - 131
 - 上传者