算法一
根据唯一分解定理,小于 (n) 的最大的能整除 (n) 的整数一定就是答案,可以暴力枚举。
时间复杂度 (O(n)),实际得分 (60)。
code:
#include<bits/stdc++.h>
using namespace std;
#define Down(i,x,y)for(i=x;i>=(y);i--)
int main()
{
int n,p;
cin>>n;
Down(p,n-1,2)
if(!(n%p))break;
cout<<p;
return 0;
}
算法二
发现算法一不能通过的原因是较大的那个质数可能的取值范围太大了。
而较小的那个质数一定小于等于 (sqrt n)。同样地,大于 (1) 的最小的能整除 (n) 的整数一定就是较小的那个质数。
时间复杂度 (O(sqrt n)),实际得分 (100)。
code:
#include<bits/stdc++.h>
using namespace std;
#define For(i,x,y)for(i=x;i<=(y);i++)
int main()
{
int n,p;
cin>>n;
For(p,2,n)
if(!(n%p))break;
cout<<n/p;
return 0;
}