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
- 难度
- 7
- 标签
- 递交数
- 404
- 已通过
- 106
- 上传者