题目传送门
https://www.luogu.com.cn/problem/P1075https://www.luogu.com.cn/problem/P1075
找出n的最大因子
线性查找第一个x,使n%x为0
一、正着来
从2开始(1不是质数),至sqrt(n)
可以不用质数判断
如果现在判断出了一个合数,一定是不合法的,因为这个合数肯定会除尽前面比它小的质数
因为是要求最大的数,所以输出的应该是n除以这个质数
然后直接跳出
代码:
#include <bits/stdc++.h>
using namespace std;
int n;
int main () {
cin >> n;
for (int i = 2; i * i <= n; i++)
if (n % i == 0) {
cout << n / i;
break;
}
return 0;
}
二、反着来
从n除以2开始(大于n除以2时不可能被n除尽),找到第一个能被他除尽的数,输出后跳出即可
代码:
#include <bits/stdc++.h>
using namespace std;
int n;
int main () {
cin >> n;
for (int i = n / 2; i >= 2; i--)
if (n % i == 0) {
cout << i;
break;
}
return 0;
}