6 条题解
-
0lichengjun LV 10 @ 2023-3-28 19:04:44
#include<iostream> using namespace std; int a,b,x,cnt; bool check(int n){ for(int i=2;i*i<=n;i++){ if(n%i==0)return false; } return true; } int main(){ cin>>a>>b>>x; for(int i=a;i<=b;i++){ if(check(i)){ int tmp=i; while(tmp){ if(tmp%10==x){ cnt++; break; } tmp/=10; } } } cout<<cnt; return 0; }
-
-12024-4-12 18:57:24@
#include<bits/stdc++.h> using namespace std; bool zs(int i){ if(i1){ return 0; } for(int k=2;k*k<=i;k++){ if(i%k0){ return 0; } } return 1; } int main(){ int a,b,d; int cnt=0; cin>>a>>b>>d; for(int i=a;i<=b;i++){ if(zs(i)1){ int t=i; while(t>0){ if(t%10d){ cnt++; break; } t/=10; } } } cout<<cnt; return 0; }
-
-12023-9-9 13:46:16@
#include <bits/stdc++.h> using namespace std; int n,m,ans,l; bool a[4000005]={}; bool c(int x) { int i=1; while(i<=x) { if(x/i%10==l) { return 1; } else { i*=10; } } return 0; } int main() { cin>>n>>m>>l; for(int i=2;i<=sqrt(m);i++) { if(a[i]==0) { for(int j=i*2;j<=m;j+=i) { a[j]=1; } } } for(int i=n;i<=m;i++) { if(a[i]==0 && c(i)) { ans++; } } cout<<ans; return 0; }
跑的飞起的筛素数 (欧拉筛表示不服)
-
-12023-3-9 17:51:59@
#include<iostream> using namespace std; bool pdzs(int n){ if(n<2){ return 0; } for(int i = 2; i * i <= n; i ++ ){ if(n%i == 0){ return 0; } } return 1; } bool pdtj(int x,int y){ while(x != 0){ if(x%10==y){ return 1; } x/=10; } return 0; } int main(){ int n,m,x,ans = 0; cin>>n>>m>>x; for(int i = n; i <= m; i ++ ){ if(pdzs(i)&&pdtj(i,x)){ ans ++ ; } } cout<<ans; return 0; }
-
-12023-1-31 19:24:23@
数据有点大,筛质数要快
如果你还在用这个朴素算法:
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;//完结撒花 }
-
-12022-7-10 9:35:25@
#include<stdio.h> #include<iostream> using namespace std; int main() { int a,b,d,sum=0,ans=0; cin>>a>>b>>d; if(a%20) a+=1; for(int i=a;i<=b;i+=2) { int k=i; int flag=1; for(int j=3;j*j<=k;j+=2) { if(k%j0) { flag=0; break; } } if(flag1) { while(k) { sum=k%10; if(sumd) { ans+=1; break; } k/=10; } } } cout<<ans<<endl; return 0; }
- 1
信息
- ID
- 975
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 404
- 已通过
- 106
- 上传者