C++求前n个素数之和(循环语句的问题)?

求前n个素数之和(循环语句的问题)

题目描述

求前n个素数的和。

例如,前5个素数是2、3、5、7、11,它们的和是28。

输入

一个整数n,1<=n<=1000。

输出

前n个素数的和

样例输入

5

样例输出

28

提示

第1000个素数是7919。

#include <iostream>
using namespace std;
int main()
{
    int n,i,j,sum=0,flag,a[1000],k;
    cin>>n;
    while(a<n){
     for(i=2;i<=7919;i++){
   flag=0;
      for(j=2;j*j<=i;j++){
       if(i%j==0){
        flag=1;
        break;
    }
   }
   if(flag==0&&i!=1) {sum+=i;a++} 
  }
 }
 cout<<sum;
}

这里的a++好像没有起到作用是为什么??
最后输出的是前1000个素数的和
新手求教,拜托了

c++

3个回答

你的a是数组,a++是非法的

#include <iostream>
using namespace std;
int main()
{
    int n,i,j,sum,a;
    cin>>n;

    a = 0;
    i = 2;
    sum=0;
    while(a<n){
        for(j=2;j<=i;j++)
            if(i%j == 0)
                break;
        if(j == i)
        {
            sum += i;
            ++a;
        }
        ++i;
    }
    cout<<sum;
}

a不应该定义为一个数组,否则a<n这样的操作相当与a[0]<n,a++则是超出了a[1000]的存储范围;
其次,这里的while循环原目的是计算前n个素数和,但是for循环不结束,while是不会进行判断的,而for已经把前1000个素数都遍历了。

#include <iostream>
using namespace std;

int main()
{
    int n,i,j,flag;
    int a=0;
    int sum=0;
    cin>>n;
        for(i=2;i<=7919;i++)
        {
            flag=0;
            for(j=2;j<i;j++)
            {
                if(i%j==0)
                {
                    flag=1;
                    break;
                }
            }
            if(flag==0&&i!=1)
            {
                sum+=i;
                a++;
                if(a==n)
                {
                    cout<<sum;
                    return 0;
                }
            } 
        }
}

图片说明

以上是个人观点,错误之处请指出

你的解法是错误的,我觉得那个a应该只是一个参数,如果是数组的首先在我这里连编译都无法通过,
即便是可以通过,定义a数组也是没有价值的,还白白浪费空间。
并且你在while循环内放置了一个for循环,初始时a 当一次for循环结束后,i已经从2遍历到了7919,100个素数都被判定并且加到了sum内,此时a=100>n,while循环无法继续进行,则弹出。
所以如果你选择while循环的话,应该把最外层for循环删除掉。
这是我个人的意见

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问