weixin_45655254
LHX?
采纳率57.1%
2019-10-18 16:35 阅读 1.2k

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个素数的和
新手求教,拜托了

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    qtchen_1988 qtchen_1988 2019-10-18 17:55

    你的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;
    }
    
    点赞 2 评论 复制链接分享
  • qq_40559873 吾谁知 2019-10-18 19:02

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

    点赞 1 评论 复制链接分享
  • Cin_Atalaxia Cin_Atalaxia 2019-10-21 14:56

    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;
                    }
                } 
            }
    }
    

    图片说明

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

    点赞 1 评论 复制链接分享

相关推荐