鱼C论坛

 找回密码
 立即注册
查看: 643|回复: 3

[已解决]c语言 判断素数

[复制链接]
发表于 2020-4-17 20:45:04 | 显示全部楼层 |阅读模式

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

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

x
输入一个整数,判断并输出该整数以内的所有素数(刚学c语言,写了快一个小时,还是不行,麻烦帮帮我)
#include<stdio.h>
int main()
{
        int i,j,t,a=0;
        printf("请输入一个整数:\n");
        scanf("%d",&i);
        if(i<2)
                printf("非法输入,请重新尝试");
        else if(i>=2)
        {
                for(t=i;t>=2;t--)
                {
                        a=0;
                        for(j=2;j<t;j++)
                        {
                                if(t%j==0)
                                {
                                        a++;

                                }
                               
                        }
                        if(a>=1)
                        {
                printf("%d\n",t);
                        }
                }
                       
                       

                                       
        }       


}
最佳答案
2020-4-17 21:29:56
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int num, x, y, flag; // 为了区分用x, y (i, j容易混淆)

  5.         printf("请输入一个整数:\n");
  6.         scanf("%d",&num);

  7.         if(num<2)
  8.                 {
  9.                         printf("非法输入,请重新尝试");
  10.                         return 0;
  11.                 }

  12.                 // 既然num<2非输入,那么剩下的就是正确输入


  13.                 // 素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除
  14.         // 既然除了1和它本身外,不能被其他自然数整除, 那么就挨个除,再判断
  15.                 // 如: 数字8 ,只要2 - 7 有一个能整除,那么8就不是素数


  16.                 // 一个大于1的自然数
  17.                 for(x=2; x<=num; x++)
  18.                 {
  19.                         // 先搞个变量flag做个记号,记录是不是素数,先假设它是
  20.                         flag = 1; // 1是
  21.                         for(y=2; y<x; y++) // 除了1和它本身外,不能被其他自然数整除。 所以从2开始
  22.                         {
  23.                                 if( (x%y)==0 )
  24.                                 {
  25.                                         flag = 0; // 不是
  26.                                         break;
  27.                                 }
  28.                         }

  29.                         // 是素数输出
  30.                         if(flag)
  31.                         {
  32.                                 printf("%d ", x);
  33.                         }

  34.                 }

  35.                 return 0;
  36. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-17 21:28:14 | 显示全部楼层
if t%j==0 表示不是素数,此时应该break,测试下一个数
而是素数的条件是j循环完了都没有跳出,此时j 应该等于t,满足这个条件再输出即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 21:29:56 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int num, x, y, flag; // 为了区分用x, y (i, j容易混淆)

  5.         printf("请输入一个整数:\n");
  6.         scanf("%d",&num);

  7.         if(num<2)
  8.                 {
  9.                         printf("非法输入,请重新尝试");
  10.                         return 0;
  11.                 }

  12.                 // 既然num<2非输入,那么剩下的就是正确输入


  13.                 // 素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除
  14.         // 既然除了1和它本身外,不能被其他自然数整除, 那么就挨个除,再判断
  15.                 // 如: 数字8 ,只要2 - 7 有一个能整除,那么8就不是素数


  16.                 // 一个大于1的自然数
  17.                 for(x=2; x<=num; x++)
  18.                 {
  19.                         // 先搞个变量flag做个记号,记录是不是素数,先假设它是
  20.                         flag = 1; // 1是
  21.                         for(y=2; y<x; y++) // 除了1和它本身外,不能被其他自然数整除。 所以从2开始
  22.                         {
  23.                                 if( (x%y)==0 )
  24.                                 {
  25.                                         flag = 0; // 不是
  26.                                         break;
  27.                                 }
  28.                         }

  29.                         // 是素数输出
  30.                         if(flag)
  31.                         {
  32.                                 printf("%d ", x);
  33.                         }

  34.                 }

  35.                 return 0;
  36. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-17 21:49:44 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 08:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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