鱼C论坛

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

关于是不是素数的问题

[复制链接]
发表于 2012-2-3 02:09:27 | 显示全部楼层 |阅读模式

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

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

x
这个是我憋了大半夜的写法,和老师的有点区别 求甄别 我这个到底可行不可行!谢谢
#include<stdio.h>
#include<math.h>
void main()
{
        int a,b;
        scanf("%d",&a);
        for(b=2;b<=sqrt(a)+3;b++)/*当a=1的时候开根以后的a是小于b的,循环不执行,当a=2时a=
                                                         b=2,a%b=0,但是2是素数*/
                if(a%b==0&&a!=2)
                {
                        printf("不是素数");
                        break;
                }
                else if(a=2)
                {
                        printf("素数");break;
                }
                else
                {
                        printf("素数");break;
                }
               
               
               
}
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-3 02:10:53 | 显示全部楼层
编译通过  而且 经少量测试代码效果达到
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-3 10:33:39 | 显示全部楼层
不可行:
1.假设a=81(这个不是素数)。循环第一次,b=2, 条件if(a%b==0&&a!=2)
不成立
条件else if(a==2)不成立
所以执行
else
                {
                        printf("素数");break;
                }
将认为81是素数。

此外,你还把else if(a==2)误写为else if(a=2)

评分

参与人数 1鱼币 +1 收起 理由
牵手,帅哥中的V + 1 谢谢

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-3 14:34:00 | 显示全部楼层
如果输入是负数的话无输出,可以改进一下。
for(b=2;b<a;b++)
    {
        if(a%b==0)
        {
            printf("这不是素数");
            break;
        }
    }
    if(a==b)
    printf("这是素数");
我数学不行阿,觉得这样看起来会容易懂些。

评分

参与人数 1鱼币 +1 收起 理由
牵手,帅哥中的V + 1 谢谢

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-3 15:05:07 | 显示全部楼层
本帖最后由 Tazy_ong 于 2012-2-3 15:09 编辑

素数好像只能被1和它本身整除吧?如果是这样就好办了,一个for循环就差不多了。以下代码希望对你有帮助!
  1. # include <stdio.h>

  2. /* ----- 函数声明 ----- */
  3. bool prime(int);

  4. /* ----- 主函数 ----- */
  5. int main(void)
  6. {
  7.         int num;

  8.         input:
  9.                 printf("请输入一个正整数: ");
  10.                 scanf("%d", &num);

  11.         if (0 > num)     // 输入值不为负数
  12.         {
  13.                 printf("输入有误!\n\n");
  14.                 goto input;     // 返回input标签
  15.         }

  16.         if ( prime(num) )
  17.         {
  18.                 printf("该整数是素数!\n");
  19.         }
  20.         else
  21.         {
  22.                 printf("该整数不是素数!\n");
  23.         }

  24.         return 0;
  25. }

  26. /* ----- 判断传递值是否为素数 ----- */
  27. bool prime(int val)
  28. {
  29.         int i;

  30.         for (i=2; i<val; i++)
  31.         {
  32.                 if (val%i == 0)
  33.                 {
  34.                         break;     // 如果传递值能被1和它本身以外的数整除,则终止循环
  35.                 }
  36.         }

  37.         if (i == val)
  38.         {
  39.                 return true;     // 如果循环变量的值等于传递值本身,则返回true
  40.         }
  41.         else
  42.         {
  43.                 return false;     // 否则返回false
  44.         }
  45. }
复制代码

评分

参与人数 1鱼币 +1 收起 理由
牵手,帅哥中的V + 1 谢谢

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-3 16:34:36 | 显示全部楼层
非常感谢大家 受教了
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-2-3 17:07:35 | 显示全部楼层
咋加分的不会用教教
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-2-3 18:10:24 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-11 02:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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