4 条题解
-
2
这是分
这里有很明显的思路错误,如果%是应该返回,判断到最后才返回。
#include <bits/stdc++.h> #define ll long long using namespace std; bool isprime(ll n) { if (n == 2) return true; for (int i = 2; i <= sqrt(n); i++) if (n % i == 0) return true; return false; } int main() { ll n, a[2000005], cnt = 0; cin >> n; for (int i = 2; i <= n; i++) { if (n % i == 0 && isprime(n) && isprime(n / i)) { a[++cnt] = i; a[++cnt] = n / i; } } sort(a + 1, a + cnt + 1); cout << a[cnt]; return 0; }
这是我分的暴力:
这里是~,最后还跑了一遍以求最大值,所以超时了
#include <bits/stdc++.h> #define ll long long using namespace std; ll n, a[2000005], cnt = 0; bool isprime(ll n) { if (n == 2) return true; for (int i = 2; i <= sqrt(n); i++) if (n % i == 0) return false; return true; } int main() { cin >> n; for (int i = 2; i <= n; i++) { if (n % i == 0 && isprime(i) && isprime(n / i)) { a[++cnt] = i; a[++cnt] = n / i; } } ll ans = -1; for (int i = 1; i <= cnt; i++) { ans = max(ans, a[i]); } cout << ans; return 0; }
这是优化后分的暴力:
因为只要求出一半的因数,另一半就可以用 的结果来算出来啦!于是就能AC此题了!
#include <cstdio> #include <algorithm> #include <cmath> #define ll long long using namespace std; ll n, a[2000005], cnt = 0; bool isprime(ll n) { if (n == 2) return true; for (int i = 2; i <= sqrt(n); i++) if (n % i == 0) return false; return true; } int main() { scanf("%lld", &n); for (int i = 1; i <= sqrt(n); i++) { if (n % i == 0 && isprime(i) && isprime(n / i)) { a[++cnt] = i; a[++cnt] = n / i; } } sort(a + 1, a + cnt + 1); printf("%lld", a[cnt]); return 0; }
这是正解的 :
这份AC代码是我一步步试出来的,如果在考场我肯定也会用奥利给哥的思路
#include <bits/stdc++.h> #define ll long long using namespace std; ll ans = 1e9; int main() { ll n; cin >> n; for (int i = 1; i <= sqrt(n); i++) { if (n % i == 0) { ans = min(ans, n / i); } } cout << ans; return 0; }
-
0
#include <bits/stdc++.h> using namespace std; long long n; void show(long long x){ map<int,int>m; for (int i=2;i*i<=x;i++){ while (x%i==0){ m[i]++; x/=i; } } if (x>1)m[x]++; vector<int>v; for (const auto&it:m)v.push_back(it.first); cout<<max(v[0],v[1]); } int main(){ cin>>n; show(n); return 0; }
-
0
#include <iostream> #include <algorithm> using namespace std; bool is_prime(int n) { //常用的质数判断程序 if(n <= 1) { return false; } for(int i = 2; i * i <= n; i++) { if(n % i == 0) { return false; } } return true; } int n, maxn = 0; int main() { cin >> n; //输入 for(int i = 1; i * i <= n; i++) { //如果i是n的因数,呢么n/i绝对也是n的因数 if(n % i == 0 && is_prime(i)) { maxn = max(maxn, i); //求原来的最大值和i的较大数 if(is_prime(n / i)) { //判断n/i是否为质数 maxn = max(maxn, n / i); //求原来的最大值和n/i的较大数 } } } cout << maxn << endl; //输出 return 0; } /* 因为只要求出了n的一半的因数,另一半就能用这个因数求出 n = 9时 n / 2 约等于 4 9 / 1 == 0: 9 / 1 = 9 所以1时9的因数,9也是9的因数 9 / 2 == 1 9 / 3 == 0: 9 / 3 = 3 因为3 = 3所以只用记录1个3 9的因数有1 3 9 */
- 1
信息
- ID
- 1492
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 651
- 已通过
- 194
- 上传者