3231991562 发表于 2017-6-21 10:23:01

用c语言求100-200中的素数

用c语言求100-200中的素数,求详细的解答。在代码后请以附加详细的解释。

ba21 发表于 2017-6-21 12:30:28

/*
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;
*/

#include<stdio.h>


main(void)
{
        int num1, num2;
        int i,j;
        int flag=0;//用来标记是否为素数

        printf("请输入2个数:");
        scanf("%d %d", &num1, &num2);

        for (i=2; i<=num2; i++) //i是一个大于1的自然数,所以从2开始,以num2 为最大数
        {
               
               for (j=1; j<i; j++)       
                {
                        if(j!=1) //素数是大于1的自然数,先排除1
                        {
                                if (i%j ==0) //是否能被其j-i之间的任意数整除
                                {
                                  flag=0;//不是素数
                                        break;
                                }
                        }       
                        flag=1; //是素数
                }
          if (flag==1)//是否为素数
          {
                  if (i>=num1 && i<=num2) //是否在筛选的范围内
                       printf("%d\n", i);
          }
        }

          return 0;
}

人造人 发表于 2017-6-21 13:04:51

#include <stdio.h>

int is_prime_number(int num)
{
        for(int i = 2; i <= num / 2; i++)
        {
                if(num % i == 0)
                        return 0;
        }
        return 1;
}

int main(void)
{
        for(int i = 100; i <= 200; i++)
        {
                if(is_prime_number(i) == 1)
                        printf("%d ", i);
        }
        putchar('\n');

        return 0;
}

101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
请按任意键继续. . .

3231991562 发表于 2017-6-21 18:18:10

人造人 发表于 2017-6-21 13:04


还没有那么高深,只知道一些简单的,,有没有更简单点的?

3231991562 发表于 2017-6-21 18:22:04

ba21 发表于 2017-6-21 12:30
/*
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;
*/


flag是什么意思呢?看懂很多了,表示感谢。

桃花飞舞 发表于 2017-6-21 19:23:26

一楼回答的很好了

ba21 发表于 2017-6-21 20:15:56

3231991562 发表于 2017-6-21 18:22
flag是什么意思呢?看懂很多了,表示感谢。

flag就是一个标志 用来存放 0 或 非0 。0 不是素数, 1是素数;这要看你的思路是怎么构思的。你也可以用 非0 表是不是素数, 0表示素数。

world.com 发表于 2017-6-21 21:19:14

3231991562 发表于 2017-6-21 18:22
flag是什么意思呢?看懂很多了,表示感谢。

flag是定义的一个变量名,用来存放结果0或非0的

人造人 发表于 2017-6-21 21:42:52

3231991562 发表于 2017-6-21 18:18
还没有那么高深,只知道一些简单的,,有没有更简单点的?

好像没有

3231991562 发表于 2017-6-21 22:17:43

ba21 发表于 2017-6-21 20:15
flag就是一个标志 用来存放 0 或 非0 。0 不是素数, 1是素数;这要看你的思路是怎么构思的。你也可以 ...

可是电脑要怎么识别这个是素数还是非素数

ba21 发表于 2017-6-22 00:07:36

3231991562 发表于 2017-6-21 22:17
可是电脑要怎么识别这个是素数还是非素数

我的天呐!
   一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做素数
假如有:1, 2, 3, 4, 5, 6, 7, 8, 9, 10;现在要算9是不是素数:
9 % 2 = 0; //取余数 = 0 ;就叫整除。 这里不能,继续
9 % 3 = 0;// 这里 除以 3 能整除,说明不是素数。反则一路这样取余,直到 自身 为止

当前时区00 发表于 2017-7-11 09:52:40

本帖最后由 当前时区00 于 2017-7-11 09:55 编辑

人造人 发表于 2017-6-21 13:04


请问 函数里面 为什么是 i <= num / 2判断素数 应该是 i<=num-1 么?

人造人 发表于 2017-7-11 10:00:41

当前时区00 发表于 2017-7-11 09:52
请问 函数里面 为什么是 i

i<=num-1 也可以

当前时区00 发表于 2017-7-11 10:18:02

人造人 发表于 2017-7-11 10:00
i

谢谢 如果不用函数调用 可以完成这种批量的素数判断吗

人造人 发表于 2017-7-11 10:36:47

当前时区00 发表于 2017-7-11 10:18
谢谢 如果不用函数调用 可以完成这种批量的素数判断吗

当然可以
#include <stdio.h>

int main(void)
{
        int flag;

        for(int i = 100; i <= 200; i++)
        {
                flag = 1;
                for(int j = 2; j <= i / 2; j++)
                {
                        if(i % j == 0)
                        {
                                flag = 0;
                                break;
                        }
                }
               
                if(flag == 1)
                        printf("%d ", i);
        }
        putchar('\n');

        return 0;
}


101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
请按任意键继续. . .

当前时区00 发表于 2017-7-11 10:50:14

人造人 发表于 2017-7-11 10:36
当然可以

谢谢

知表不言 发表于 2017-7-12 07:19:38

#include <>

知表不言 发表于 2017-7-12 07:26:33

#include <studio.h>
#include <math.c>
整形 i, n
当n从100到200时
当i从2到(int)sqrt(n)时
判断有无n%i==0
有则n为合数
无则n为素数
页: [1]
查看完整版本: 用c语言求100-200中的素数