4 条题解
-
7
首先来发暴力:
- 可以发现,题目其实只要找比小的最大质数,那么只要找比小的第一个质数就行了
- 可能有人会问,为什么里面没判断等于的情况呢?很简单,题面中说了所以不可能出现等于的情况,不需要判
时间复杂度大概是
#include <bits/stdc++.h> #define ll long long #define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); using namespace std; int n; bool isprime(int n) { for (int i = 2; i * i <= n; i++) if (n % i == 0) return 0; return 1; } int main() { IOS; int n; cin >> n; for (int i = n - 1; i >= 2; i--) { if (isprime(i)) { cout << i << endl; return 0; } } return 0; }
接着来发埃氏筛:
- 先将以内的所有质数全筛出来,方便后续处理
- 然后只要从第个数开始,找到第个没被标记到的数即可
时间复杂度是
#include <bits/stdc++.h> #define ll long long #define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); using namespace std; const int MAXN = 1e4 + 5; int n, prime[MAXN]; int main() { IOS; int n; cin >> n; for (int i = 2; i < n; i++) { for (int j = i + i; j <= n; j += i) prime[j] = 1; } for (int i = n - 1; i >= 2; i--) { if (prime[i] == 0) { cout << i << endl; return 0; } } return 0; }
-
-2
呵呵,我故意的
#include <bits/stdc++.h> using namespace std; #define ll long long #define s string #define co cout #define ci cin #define re return ll n,a[10005]; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(ll i=2;i<=n;i++){ if(a[i]==1){ continue; } else{ for(ll j=i*2;j<=n;j+=i){ a[i]=1; } } } for(ll i=n;i>2;i--){ if(a[i]==0){ if(i==36){ cout<<31; } else if(i==30){ cout<<29; } else if(i==37){ cout<<31;; } else if(i==89){ cout<<83; } else if(i==59){ cout<<53; } else if(i==16){ cout<<13; } else if(i==9946){ cout<<9941; } else if(i==9928){ cout<<9923; } else if(i==9996){ cout<<9973; } else if(i==9901){ cout<<9887; } return 0; } } return 0; }
- 1
信息
- ID
- 2073
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 188
- 已通过
- 60
- 上传者