0

私の素数チェック機能は、9、15などを素数として示していません。私のコードは次のとおりです。

#include<iostream>
#include<cstdio>
using namespace std;
int prime_function(int num, int i);
int main(){
    int num,flag=0;
    while (cin>>num){
        if(num!=1){
            flag=prime_function(num,2);
            if(flag==0)
                printf("%d isn't a prime.\n",num);
            else {
                printf("%d is a prime.\n",num);
            }   
        }
        else {
            printf("%d is a prime.\n",num);
        }
    }
    return 0;
}

int prime_function(int num, int i)
{
    if(num%i==0){
        printf("when num mod i == 0, num=%d    i=%d\n",num,i);
        return 0;//This Statement doesn't work for like num=9,15...
    }
    else if((i*i)+1<=num){
        printf("when num mod i != 0, num=%d    i=%d\n",num,i);
        prime_function(num,++i);
    }
    printf("Going to main function.\n");
    return 1;
}

エラーを簡単に見つけられるように、コードをかなりグラフィカルにしました。9 を入力すると、プログラムは次のように表示されます。

when num mod i != 0, num=9    i=2
when num mod i == 0, num=9    i=3
Going to main function.
Going to main function.
9 is a prime.

「Going to main function」と表示されます。一度、メイン関数に来ます。しかし、そうではなく、関数全体を通過してから、メイン関数になります。誰でもこの問題を解決できますか?

4

2 に答える 2

2

それ以外の

prime_function(num,++i);

あなたがしたい

return prime_function(num,++i);
于 2015-07-18T08:39:17.947 に答える