素数之和

时间:2017-12-06 11:55:42

标签: c

我想计算101到203之间偶数素数的总和。但是我的代码的输出是错误的,输出是52。 任何人都可以帮助我,以获得正确的输出,在我的代码中,我认为偶数数字肯定不是素数,这就是为什么我逃脱它们。我想通过prime函数使用这个方法来解决它。我该怎么办?非常感谢你

#include <stdio.h>
int prime(int n)
{
    int i=2;
    int n2;
    n2 = n/2;
    while (1<=n2) {
        if (n%i == 0) {
            return 0;
        } else {
            return 1;
        }
        i++;
    }
}

int main()
{
    int sum=0;
    for (int i=101; i<=203; i+=2) {
        if (prime(i)==1) {
        }
        sum+=1;
    }
    printf("%d \n",sum);
    return 0;
}

3 个答案:

答案 0 :(得分:1)

您的代码中存在多个问题。

for循环中:

    for (int i=101; i<=203; i+=2) {
    if (prime(i)==1){
    }sum+=1;

语句sum+=1应位于if块内。

此外,您要将1添加到sum。相反,您应该添加i,因为您希望得到素数之和:

sum+=i;

仅当prime()循环检查条件1while的所有值且{的值均为n%i == 0时,函数i才会返回i {1}}它是true。因此,您需要将return 1移出while循环。

此外,在while的{​​{1}}循环中,这是不正确的:

prime()

应该是:

while (1<=n2) {

总的来说,应该是:

while (i<=n2) {

答案 1 :(得分:0)

首先:你不需要'i ++;'在你的素数方法中,因为这是无法访问的代码。

第二:尝试使用此函数检查数字是否为素数:

#include <stdio.h>
int prime(int n)
{
    for (int i = 2; i < n; i++) {
        if (n % i == 0 && i != n) return 0;
    }
    return 1;
}

int main()
{
    int sum=0;
    for (int i=101; i<=203; i+=2) {
        if (prime(i)==1){
          sum+=i;
        }
    }
    printf("%d \n",sum);
}

答案 2 :(得分:0)

没有任何东西可以作为最重要的数字......你总是会得到0。

但要真正回答你的问题...

你真的不需要把i ++放在你的第一个功能中。其次,试试这个

for (int i=101; i<=203; i++)
{
   i++
   if (prime(i)==1)
   {
     sum+=i;
   }
}

这应该有效。您不需要将总和增加1,每次有素数时都需要添加i。你得到52的原因是因为你总和+ = 1,它在for循环中将总和加起来为52次。