在do-while循环中确定用户输入的变量是否为素数

时间:2015-02-25 06:00:34

标签: c primes

所以我的任务如下:构造一个do-while()循环,它继续提示用户输入一个整数,并确定输入的整数之和,直到遇到一个素数。素数不应包含在总和中。显示所有变量声明。

我已将所有变量正确加起来,但似乎无法使函数停止在素数上。为了纠正这个问题,我制作了变量" primecheck"并设置为2 ++认为它将是每个大于2的整数(显然不可能,但人们可能希望)。任何帮助将不胜感激!

int main (void)
{
    int sum = 0, num = 0, i = 0, primecheck = 0, two = 2;

    primecheck = two++;
    do
    {
            printf ("Enter an integer: ");
            scanf ("%d", &num);
            if (num % primecheck == 0 && primecheck != num)
            {
                sum += num;
            }
    } while (num % primecheck == 0 && primecheck != num);

    i = sum;
    printf("%s%d%s", "Sum = ", i, "\n");

}

1 个答案:

答案 0 :(得分:1)

一种可能性是引入一个执行素数检查的函数,这可以通过使用所有较小数字的校验除法来完成,并在找到素数时立即终止循环。可以在this link之后找到实现;代码可以重构为以下函数进行素性测试。如果1为素数,则函数返回n,否则返回0。该实现使用显式while循环,因为需求显然需要它。

int is_prime(int n)
{
    int i=3;
    int flag=0;
    if (n%2==0)
    {
        return 0;
    }
    do
    {
        if (n%i==0)
        {
            flag=1;
            break;
        }
        i+=2;
    }
    while (i*i<=n);
    return flag;
}