为什么我不对

gigi 2024-08-21 12:00:11 10

#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

{{ vote && vote.total.up }}

共 3 条回复

xulaoshi

你这程序,这么写没问题,但是少了一个条件就是,缺了质因子的“质”,

也就是说你现在是从大到小的去找因子,只要条件成立,就解决的最大的因子,

但是这个因子是不是质数呢?

所以在输出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;

}

看能否理解

root 站长

@elk 👍

elk

你for循环从N开始,那N%N==0,所以输入30输出30