鱼C论坛

 找回密码
 立即注册
查看: 2422|回复: 7

求素数

[复制链接]
发表于 2019-10-27 15:42:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目内容:
我们认为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;
}


是哪里理解错了嘛?想到崩溃,不会求素数和了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-27 15:50:34 | 显示全部楼层
先说你的语法问题               
if( 0<n & n<=m & m<=200)
这条语句是什么意思?
C语言单个&的意思可以是取地址,也可以是位与运算符;
C++除了以上两个意思还可以表示对象的引用。
关系与运算符是&&!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-10-27 17:22:25 | 显示全部楼层
语法有问题,而且你的代码逻辑是求n到m之间的素数和
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
2345截图20191027174043.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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");
        }


            
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-28 14:42:15 | 显示全部楼层
bin554385863 发表于 2019-10-27 15:50
先说你的语法问题               
if( 0

谢谢指正 不过题目中求素数和,为啥是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;
}

这段代码算出来的就是对的?新人表示不懂。。还望大佬指教,十分感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-28 14:46:33 | 显示全部楼层
bin554385863 发表于 2019-10-27 17:34
我很好奇2到4之间的素数和你是怎么算到15的;

题目就是为15,新人的俺,三观感觉都被粉碎了,表示也不懂,感觉数学没学好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-28 21:05:33 | 显示全部楼层
if语句里面&改为&&就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 17:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表