素数求和-用c++实现求素数的和时遇到一个问题

问题描述

用c++实现求素数的和时遇到一个问题

描述
现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和。
输入
第一行给出整数M(0<M<10)代表多少组测试数据
每组测试数据第一行给你N,代表该组测试数据的数量。
接下来的N个数为要测试的数据,每个数小于1000
输出
每组测试数据结果占一行,输出给出的测试数据的所有素数和

代码:
#include
using namespace std;
int main()
{
int M;
int flag=1;
cin>>M;
while(M--){
int N,i;
int sum=0;
cin>>N;
while(N--){
cin>>i;
for(unsigned cnt=2;cnt<i/2+1;cnt++){
if(i%cnt==0){
flag=0;
break;
}

}

               if(!flag==0){
               sum+=i;
               flag=1;
               }

  }
  cout<<sum<<endl;

}

system("Pause");
return 0;
}

N代表有多少组测试数据;M代表每组有多少个数据;i代表具体数据
接下来是我遇到的问题:
当我输入的都是素数时能正确求出素数和,但是如果中间有一个合数,那么这个合数后面的素数就没有算进去了,不知道为什么。
麻烦大家帮我找一下原因。

解决方案

每次for循环前,flag都要初始化成1,否则上次的判断会影响到下次

解决方案二:

这样看看

#include<iostream>
using namespace std;
int main()
{
   int M;
   int flag=1;
   cin>>M;
   while(M--){
      int N,i;
      int sum=0;
      cin>>N;
      while(N--){
             cin>>i;
                        flag = 1;
             for(unsigned cnt=2;cnt<i/2+1;cnt++){
                   if(i%cnt==0){
                   flag=0;
                   break;
                   }
             }

                   if(!flag==0){
                   sum+=i;
                   flag=1;
                   }

      }
      cout<<sum<<endl;
   }
    system("Pause");
    return 0;
}
时间: 2024-10-28 19:48:28

素数求和-用c++实现求素数的和时遇到一个问题的相关文章

使用c语言判断100以内素数的示例(c语言求素数)_C 语言

从console输入一个数,判断这个数是否为素数(质数). 复制代码 代码如下: #include <stdio.h> /**判断100以内的素数*/ //定义函数判断是否是素数int isPrime(int num ){    int i;    //从2开始循环,一直到i的平方小于等于给定的数.    for (i = 2; i*i <= num; i++) {        if ( ( num % i ) == 0 ) {            return 0;       

printf-c语言 素数求和问题 求大神看看我代码的问题

问题描述 c语言 素数求和问题 求大神看看我代码的问题 http://acm.nyist.net/JudgeOnline/problem.php?pid=22&rec=rec 我的代码是: #include #include int main() { int N,M,sum,i,j,a[10],flag; double s; scanf("%d",&M); while(M--) { scanf("%d",&N); for(i=0;i<N

c++求素数和的问题,求查问题

问题描述 c++求素数和的问题,求查问题 求素数和 描述 对于给定的一个正整数序列,求它包含的所有素数的和. 输入 输入的第一行是一个整数n,在区间[1,10000]之中.后面紧跟n行,每一行是一个整数,在区间[1,100]之中. 输出 对输入的n个正整数中所有的素数求和,并把和在一行中输出. 样例输入 5 8 2 3 7 10 样例输出 12 我写的代码,自己试是对的,但提交结果有错,不是为何 #include using namespace std; int main() { int n;

素数求和

描述 现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和. 输入 第一行给出整数M(0<M<10)代表多少组测试数据 每组测试数据第一行给你N,代表该组测试数据的数量. 接下来的N个数为要测试的数据,每个数小于1000 输出 每组测试数据结果占一行,输出给出的测试数据的所有素数和 样例输入 3 5 1 2 3 4 5 8 11 12 13 14 15 16 17 18 10 21 22 23 24 25 26 27 28 29 30 样例输

JS实例教程:用6N±1法求素数

用6N±1法求素数任何一个自然数,总可以表示成为如下的形式之一:6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,-)显然,当N≥1时,6N,6N+2,6N+3,6N+4都不是素数,只有形如6N+1和6N+5的自然数有可能是素数.所以,除了2和3之外,所有的素数都可以表示成6N±1的形式(N为自然数).根据上述分析,我们可以构造另一面筛子,只对形如6 N±1的自然数进行筛选,这样就可以大大减少筛选的次数,从而进一步提高程序的运行效率和速度. 以下代码需要自然数大于10fu

深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表_php技巧

PHP几个算法整理 涉及到以下几个示例.PHP冒泡PHP二分法PHP求素数PHP乘法表 PHP冒泡法 示例 复制代码 代码如下: //PHP冒泡  从小到大function maopao(&$arr){  if(!empty($arr))  {    for($i=0;$i<count($arr);$i++)      {        if($arr[$i]>$arr[$j])        {          //开始交换          $temp = $arr[$i];  

c语言-C语言求素数算法,有几种方法可以降低时间复杂度

问题描述 C语言求素数算法,有几种方法可以降低时间复杂度 b可以非常大的时候,输出a到b之间素数的个数,怎么才能简化算法,降低运行时间 解决方案 采用列表法,每次找到新的素数,添加到表中.每次寻找素数,不用每个数字都尝试一次,而只要尝试小于这个数字的1/2的所有素数就可以了. 解决方案二: 具体做法 http://blog.csdn.net/liukehua123/article/details/5482854 解决方案三: 不需要b的1/2,只需要判断到b的根号2 解决方案四: http://

c语言-C语言求素数一个小问题

问题描述 C语言求素数一个小问题 题目是要求n以内素数的平方根的和,编好了之后怎么运行答案都不对,加了这句选中的语句才对了,请问这句if(j>=k+1)有什么用?在上面一个for循环中j应该是到不了k+1的吧--求详解 解决方案 你的程序写的不好,没有用缩进和正确的换行,结果是自找麻烦,你自己都搞不清楚for和什么语句配对了. 这里有两重循环,外循环是从3~n找素数,内侧是判断i是不是素数 if (k >= i+1)表示,循环走完了,k才会等于i+1,而循环如果提前break表示它可以被整除,

c语言-C语言素数的编程问题,求大家解答

问题描述 C语言素数的编程问题,求大家解答 这些代码编译没有问题,我测试了几个数也没有问题,为什么放到AMC的OJ系统一直说答案错误? 求大家看看 谢谢了! 问题要求是输入整数,判断素数 如果是就输出1,不是就输出0 #include int main() { int a,i,find; scanf("%d",&a); if(a<=1) { find=0; printf("%d",find); return 0; } for(i=2;i<a;i+