WR:
#include<iostream>
#include<vector>
#include<stack>
#include<string>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,p1,p2;
bool isprime(int x) {
for (int i=2;i<=sqrt(x);i++)
{
if (x%i)
{
return false;
}
}
return true;
}
int main() {
cin >> n;
for (int j = 3; j <=sqrt(n); j+=2)
{
if (n%j==0&&isprime(j))
{
cout << max(j, n / j);
break;
}
}
return 0;
}
问题1:不需要确定因数是否为质数,因为 算术基本定理
问题2:2也是质数,j应该从2开始。
问题3:同问题2,因为j没有从2开始导致样例n=6
没有过。
AC代码:
#include<iostream>
#include<vector>
#include<stack>
#include<string>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL;
int n;
int main() {
cin >> n;
if (!(n % 2))
cout << n / 2;
else {
for (int j = 3; j < n; j += 2)
{
if (!(n % j))
{
cout << max(j, n / j);
break;
}
}
}
return 0;
}
看起来还是太繁琐(问题4)了,看看y总的代码:
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 2; ; i ++ )
if (n % i == 0)
{
cout << n / i << endl;
break;
}
return 0;
}
问题4:因为是从小到大来判断质因数的,所以可以不用max(),直接取n/i即可。