1 条题解
-
1
其实是一个结论题
我们都知道可以通过暴力枚举每一个小于n的数并判断是否是质数
如果我们从n开始,倒着遍历,是不是就能成功找到,第一个出现的,能被n整除的,而且是质数的数?
然而……时间复杂度爆炸了
#include<iostream> using namespace std; bool isprime(int x){ if(x<2) return false; if(x==2) return true; for(int i=2;i<=x/i;i++){ if(x%i==0) return false; } return true; } int main(){ int n; cin>>n; for(int i=n;i>=2;i--){ if(n%i==0&&isprime(i)) {cout<<i;return 0;} } return 0; }所以必须探索更高效的办法……或许我们不用判断质数?
如果我们从2开始,直到n结束?
题目中保证n不是质数,而且如果我们去寻找n的所有因数,其实不难发现因数是成对出现的
n=21 n的因数:1,3,7,21
那这就告诉我们,如果我们能找到一个能被n整除的数,是不是说明前边没用任何能够被n整除的数?
那是不是说,相应的,另一个数,也可以被n整除?
那么那个数,是不是就是最大的?
#include<iostream> using namespace std; int main(){ int n; cin>>n; for(int i=2;i<=n;i++){ if(n%i==0) {cout<<n/i;return 0;} } return 0; }
信息
- ID
- 13
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 显示难度暂无评定
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者