题目描述
对于一个正整数n,如果n除以某个正整数d所得的余数为0,我们称d是n的约数。显然1和n一定是n的约数,请问对于给定的n(n≥2),除了n本身以外,最大的约数是多少?
对于30%的数据,n≤100;
对于50%的数据,n≤106;
对于100%的数据,2≤n≤2×109 。
输入
共一行,包含一个正整数n。
输出
共一行,包含一个正整数,表示n除了自身以外的最大约数。
样例输入
15
样例输出
5
题目分析
15的约数有1,3,5,15,除了15本身以外的最大约数为5。
要找最大公约数暴力循环肯定会时间超限,那既然是要找最大公约数我们可以想到一个数的约数都是成对出现的。例如28的约数有1,28,2,14,4,7。所以就找出除1外它的最小约数即可找到最大约数。同时分析若是质数,则除了它本身只有1是最大约数。
代码实现
#include <iostream>
using namespace std;
int main()
{
long long int l,i,s = 0,f = 0;
scanf("%d",&l);
for(i = 2; i < l; i++)
{
if(l % i == 0)//找出最小约数就break
{
f = 1;
s = l / i;
break;
}
}
if(f == 1)
{
printf("%d",s);
}
else cout << 1;//若除了1和它本身没有最小约数
return 0;
}