2 条题解
-
1
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n; ll flag; ll c; cin>>n; if(n==1) cout<<1; if(n==3)//n=3时循环读取不到,因为i从2开始,n至少为4,所以进行特判 cout<<"YES"; for(ll i=2;i<=sqrt(n);i++) { if(n%i==0) { flag=0; c=i; break; } else flag=1; } if(flag==1) cout<<"YES"; if(flag==0) cout<<n/c; return 0; }
-
0
#include <iostream> #include <cmath>
bool isPrime(int n) { if (n <= 1) return false; // 0 和 1 不是质数 if (n <= 3) return true; // 2 和 3 是质数 if (n % 2 == 0 || n % 3 == 0) return false; // 排除能被 2 和 3 整除的数
// 只需检查到 sqrt(n),因为如果 n 不是质数,它必有一个因子小于或等于 sqrt(n) for (int i = 5; i * i <= n; i += 6) { if (n % i == 0 || n % (i + 2) == 0) return false; } return true;
}
int secondLargestFactor(int n) { int factor = 1; // 首先找到最小的因子(除了 1) for (int i = 2; i <= sqrt(n); ++i) { if (n % i == 0 && n / i > factor) { factor = n / i; } } return factor; }
int main() { int n; std::cin >> n;
if (isPrime(n)) { std::cout << "YES" << std::endl; } else { int secondLargest = secondLargestFactor(n); std::cout << secondLargest << std::endl; } return 0;
}
- 1
信息
- ID
- 98
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 161
- 已通过
- 49
- 上传者