C ++中数字的素数除数

时间:2013-03-02 10:30:17

标签: c++

这是我关于Stackoverflow的第一个问题,所以如果我做错了,请原谅。你能用这段代码帮我吗?谢谢! :)

#include <iostream>
using namespace std;

1)

int divisor(int a) // function that checks the divisors of a number *)
{
int i=1; // counter
while(i<=a) // while the counter is less than the number given
{
    int i;
    if(primes(i)) // here i get the error "primes was not declared in this scope
    {
        if(a%i==0) // if the remainder of the operation is 0, the number is a divisor
        {
            cout<<"The divisors of the number are: "<<i<<endl; // prints the divisors
            ++i; // counter is incremented
        }
    }
    else // else it is not, and the counter i is incremented
    {
        ++i;
    }
}
}

2)

int primes(int number) // checks if a number is prime
{
int i; 
for(i=2;i<number;i++) // for loop until the counter i is less than a number
{
    if(number%i==0) // if the remainder of the operation is 0, the number is not prime
    {
        break;
    }
    else //else the number is prime
                    cout<<number;
        break;
    }
}
}

3)

int main()
{
int n,i;
cout<<"Give the number: ";
cin>>n;
for(i=2;i<n;i++)
{
    divisor(n);
}

}

2 个答案:

答案 0 :(得分:2)

有几个问题:

1)您需要在primes()之前转发声明divisors()

int primes(int number);

2)您的primes()函数无法返回值。

3)并非divisor()中的所有代码路径都会增加i

我确信还有更多问题,但这应该让你开始......

答案 1 :(得分:0)

假设您在上面给出的顺序与您在文件中使用的顺序相同,问题是您的除数函数首先出现并使用稍后声明的primes函数。最简单的(也是我最常见的)解决方案是使用“foward-delcaration”。这意味着您在文件顶部指出:

int divisor(int);
int primes(int);

此外,您忘记了primes()返回一个值。 (因为这个问题被标记为 C ++,您甚至可以考虑让它返回bool而不是int)。

同样在素数中,else子句现在会导致休息,但我不认为这是完全明智的。像9这样的数字在除以2时会在该子句中结束,但是它不能被2整除的事实并不会使它成为主要的......

在寻找素数方面还有其他“智能技巧”,但也许这不属于这个问题的范围。