#include using namespace std; int main() { int N; cin >> N; for (int i = N; i >= 2; i--) { if (N % i == 0) { cout << i << endl; break; } }
return 0;
}
输入30,输出的还是30
你这程序,这么写没问题,但是少了一个条件就是,缺了质因子的“质”,
也就是说你现在是从大到小的去找因子,只要条件成立,就解决的最大的因子,
但是这个因子是不是质数呢?
所以在输出i之前需要判断当前i是不是质数,是就输出,不是就继续,
因为只需要最大的那一个质因子,所以输出后就跳出循环。
#include<bits/stdc++.h>
using namespace std;
int main() {//30 1,2,3,5,6,10,15,30 5
int n; cin>>n; for(int i=n;i>=1;i--)//从大到小找因子 { if(n%i==0)//判断是不是因子,是因子就再看是不是质数 { bool bj=1;//假设是质数 for(int j=2;j<i;j++)//逐个看看到底是不是 { if(i%j==0)//能被其他数整除就说明不是,改个标记 { bj=0; } } if(bj==1)//只要标记的值还是原来的值,那就说明就是质数 { cout<<i;//执行到这里,就说明i是n的因子、还是质数,而且还是最大的 return 0;//只要一个,那么找到了就直接结束 } } } return 0;
看能否理解
@elk 👍
你for循环从N开始,那N%N==0,所以输入30输出30
共 3 条回复
你这程序,这么写没问题,但是少了一个条件就是,缺了质因子的“质”,
也就是说你现在是从大到小的去找因子,只要条件成立,就解决的最大的因子,
但是这个因子是不是质数呢?
所以在输出i之前需要判断当前i是不是质数,是就输出,不是就继续,
因为只需要最大的那一个质因子,所以输出后就跳出循环。
#include<bits/stdc++.h>
using namespace std;
int main() {//30 1,2,3,5,6,10,15,30 5
}
看能否理解
@elk 👍
你for循环从N开始,那N%N==0,所以输入30输出30