冰童雪夜 发表于 2019-10-27 15:42:17

求素数

题目内容:
我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

输入格式:
两个整数,第一个表示n,第二个表示m。

输出格式:
一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

输入样例:
2 4

输出样例:
15

#include <stdio.h>
int main()
{
        int n,m;
        int sum=0;
       
        scanf("%d %d",&n,&m);
               
        if( 0<n & n<=m & m<=200)
        {
                while(n<=m)
                {
                        int i;
                        int p=1;
                       
                        for( i=2 ; i<n ; i++ )
                        {
                                if( n%i == 0)
                                {
                                p=0;
                                break;       
                                }       
                        }
                        if(p==1)
                                {
                                sum+=n;
                                }
                               
                        n++;
                }
               
                printf("%d",sum);
        }else{
                return 0;
        }
        return 0;
}


是哪里理解错了嘛?想到崩溃,不会求素数和了。。

bin554385863 发表于 2019-10-27 15:50:34

先说你的语法问题               
if( 0<n & n<=m & m<=200)
这条语句是什么意思?
C语言单个&的意思可以是取地址,也可以是位与运算符;
C++除了以上两个意思还可以表示对象的引用。
关系与运算符是&&!

只会白给 发表于 2019-10-27 17:22:25

语法有问题,而且你的代码逻辑是求n到m之间的素数和

bin554385863 发表于 2019-10-27 17:34:01

本帖最后由 bin554385863 于 2019-10-27 17:43 编辑

我很好奇2到4之间的素数和你是怎么算到15的;
#include <stdio.h>
void func()
{
        int m = 0, n = 0, sum = 0, count = 0;
        printf("请输入范围,最小值应大于0\n");
        scanf("%d%d", &m, &n);
        int _max = m > n ? m : n;//上限
        int _min = m < n ? m : n;//下限
        if (_min < 0)
        {
                printf("DATE ERROR!");
        }
        else
        {
                for (size_t i = _min; i <= _max; i++)
                {
                        for (size_t j = 1; j <= i; j++)
                        {
                                if (i % j == 0)
                                {
                                        count++;//判断因数的个数
                                }
                        }
                        if (count == 2)//因数如果只有2个则其必为质数
                        {
                                sum += i; //累加
                        }
                        count = 0;//重置计数器
                }
        }
        printf("%d ", sum);
}
int main(int argc, char * argv[])
{
        while (1)
        {
                func();
                printf("\n");
        }
        return 0;
}

谁能不死 发表于 2019-10-27 19:18:03

#include <stdio.h>

void main()
{
   int n,m, sum=0 ;
       int i,j;

        printf("请输入2个数字n和m用,隔开0<n<=m<=200 \n");

        scanf("%d,%d",&n,&m);

        if(0<n&&n<=m&&m<=200)
        {
   for (i=n; i<=m; i++)
    {
      for(j=2;j<=m/2;j++)
                {
                        if(i%j==0)
                        {
                                break;
                        }
                        if(j>i/2)
                        {
            sum = sum+i;
                       

                       break;
                        }
                       
                }             
                       
        }
        printf("所有素数的和是%d\n",sum);
        }
        else
        {
                printf("请重新输入\n");
        }


            
}

冰童雪夜 发表于 2019-10-28 14:42:15

bin554385863 发表于 2019-10-27 15:50
先说你的语法问题               
if( 0

谢谢指正{:5_92:} 不过题目中求素数和,为啥是15而不是,2+3为5?

#include<stdio.h>
int main()
{
        int x=2;
        int cnt=0;
        int q,w;
        int e=0;
        scanf("%d %d",&q,&w);
        q=2;
        w=4;
        while(cnt<=200)
        {
                int b=1;
                int i;
                for(i=2;i<x;i++)
                {
                        if(x%i==0)
                        {
                        b=0;
                        break;
                        }
                }
                if(b==1)
                        {
                                cnt++;
                               
                                if(q<=cnt && cnt<=w)
                                {
                                        e+=x;
                                }
                        }
                x++;
        }
        printf("%d",e);
        return 0;
}

这段代码算出来的就是对的?新人表示不懂。。还望大佬指教,十分感谢{:5_111:}

冰童雪夜 发表于 2019-10-28 14:46:33

bin554385863 发表于 2019-10-27 17:34
我很好奇2到4之间的素数和你是怎么算到15的;

题目就是为15,新人的俺,三观感觉都被粉碎了,表示也不懂,感觉数学没学好{:5_100:}

huanzhilian 发表于 2019-10-28 21:05:33

if语句里面&改为&&就好了
页: [1]
查看完整版本: 求素数