>

사용자가 입력 한 숫자의 최대 소수를 계산하는 프로그램을 작성하려고합니다."FindFactor"함수는변수에 저장된 최대 계수를 계산합니다 "Factor""TestFactor"기능은인 경우 해당 요인에 몇 가지 요인이 있는지를 테스트하여"NFactors"에 저장됩니다 "NFactors"0과 같습니다 .Factor는 주요 요소입니다. 그렇지 않은 경우 초기 입력 값이 "Factor"로 바뀌고 루프가 다시 시작됩니다.

문제는 주어진 숫자의 출력이프라임요소가 아닌 입력의 가장 큰 요소라는 것입니다.

일부 어설픈 후 문제가"FindFactor"가 가장 큰 요소를 정확하게 계산할 수 있지만"TestFactor"에 있음을 확인했지만 왜 두 기능이 실질적으로 동일하기 때문에"TestFactor"가 항상0을 출력합니다.

디버거를 사용하려고 할 때 상황이 더 이상해집니다. (아마도 이것이 처음 사용했기 때문에 내가 무엇을하고 있는지 전혀 모릅니다) :

"TestFactor"에 포함 된 로컬을"NF"로 설정하여 값을 확인하고" 식별자 "i"가 정의되어 있지 않습니다 ","i ""FindFactor "에 포함 된 로컬 변수이며 실제로 올바르게 작동하는 함수입니다.

그런 다음 중단 점을"NFactors"로 설정했으며 이번에는 다음과 같은 예외가 발생합니다."가장 큰 Prime Factor.exe의 0x00A01D9D에서 처리되지 않은 예외 : 0xC0000094 : 0으로 정수 나누기. "

다음 작업을 참조 :

if (y % j == 0)

j = y-1.

과 같은 경우가 아니라

전체 프로그램은 다음과 같습니다.

#include <iostream>
using namespace std;
int FindFactor(int x);
int TestFactor(int y);
int main() {

    int input, Factor, NFactors,inputsave; bool prime=false;
    cout << "Please enter a number" << endl;
    cin >> input;
        inputsave = input;
        while (prime == false) {
            Factor = FindFactor(input);
                NFactors = TestFactor(Factor);
                if (NFactors != 0) {
                    prime = true;
                }
                else {
                    prime = false;
                    input = Factor;
                }
        }
        cout << "The largest prime factor for " << inputsave << " is " << Factor << endl;
}
int FindFactor(int x) {
    int i;
    for (i = x - 1; i > 1; i--) {
        if (x % i == 0) {
            break;
        }
        else {};
    }
    return i;
}
int TestFactor(int y) {
    int j, NF = 0;
    for (j = y - 1; j > 1; j--) {
        if (y % j == 0) {
            NF++;
        }
        else {};
        }

    return NF;
}

요약 :

"TestFactor": 출력은 항상0입니다.

주요 프로그램 : 출력은 항상프라임요소가 아니라 입력의 가장 큰 요소입니다.

  • 답변 # 1

    TestFactor에 오타가 있습니다. 루프 조건으로 j>1을 사용하십시오.

관련 자료

  • 이전 c++ - gcc의 fma3 - 활성화하는 방법
  • 다음 python - lxml에서 요소의 직접적인 자식을 찾는 방법