vlambda博客
学习文章列表

C语言编程:找出十个最小的连续自然数,它们个个都是合数(非素数)

大家好,我是阿汤哥。昨天我们求了1到1000之间的所有素数。今天我们来 找出十个最小的连续自然数,它们个个都是合数(非素数)。

先给出定义:

自然数:非负整数。0,1,2,3,......

合数:如果一个整数可以被除了1和自身的其他整数整除,那么这个整数是合数。比如4,因为它除了可以被1和4整除,还可以被2整除,所以它是合数。

算法思想:

昨天的例子里(可以点击下面链接,查看昨天的文章),我们写了判断是否是素数的函数 is_prime_bumber(int a)。这个函数也可以用来判断是合数。如果一个整数作为参数的返回值是false,那么这个数是合数。




//判断是否是素数(非合数)
bool is_prime_number(int a)
{
    for (int i = 2; i < a ; i++){
        if (a % i == 0){
            printf("%d = %d * %d\n", a , i , a/i);
            return false;
        }
    }

    return true;
}



那么怎么找出十个最小的连续自然数,且它们个个都是合数呢?

我们只要对十个连续的整数调用函数is_prime_number()同时进行判断,判断它们是不是都是返回false(是合数),如果是那这十个数就是哦我们所要找的。

先写一个判断连续十个整数是否都是合数的函数is_ten_composite_number()。思路是:依次判断这十个整数,一旦发现有素数,就返回false。如果十个都不是素数,那么返回true。


//判断从整数a开始的连续十个整数是否都是合数
bool is_ten_composite_number(int a)
{
    int i = a;

    for (;i < a + 10; i++){
        if (is_prime_number(i))
            return false;
    }
    return true;
}


之后,我们再写找”十个最小的连续自然数,它们个个都是合数“。思路就是从2开始调用函数is_ten_composite_number(),直到is_ten_composite_number()返回true,即找到了我们要找的。


//找出十个最小的连续自然数,它们个个都是合数
int min_ten_composite_number()
{
    bool find  = false;
    int j ;
    for (int i = 2; ;i++){
        if(is_ten_composite_number(i))
            return i;
    }

}


main函数:


int main(void)
{
    int num;

    num = min_ten_composite_number();

    printf("%d ", num);

}


最后,看看运行结果:

下面十个连续的自然数就是我们要找的:

114、115、116、117、118、119、120、121、122、123。




在看和收藏也是对作者的鼓励哦!