C语言求100~200之间的素数

简介: C语言求100~200之间的素数(逐步优化)
+关注继续查看

思路:

素数:即质数,除了1和自己之外,再没有其他的约数,则该数据为素数,具体方式如下

方法一:试除法

int main()
{
    int i = 0;
    int count = 0;
    // 外层循环用来获取100~200之间的所有数据,100肯定不是素数,因此i从101开始
    for (i = 101; i <= 200; i++)
    {
        //判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数
        int j = 0;
        for (j = 2; j<i; j++)
        {
            if (i%j == 0)
            {
                break;
            }
        }
        // 上述循环结束之后,如果j和i相等,说明[2, i)之间的所有数据都不能被i整除,则i为素数
        if (j == i)
        {
            count++;
            printf("%d ", i);
        }
    }
    printf("\ncount = %d\n", count);
    return 0;
}

image.gif

上述方法的缺陷:超过i一半的数据,肯定不是i的倍数,上述进行了许多没有意义的运算,因此可以采用如下

方式进行优化

方法二:每拿到一个数据,只需要检测其:[2, i/2]区间内是否有元素可以被2i整除即可,可以说明i不是素数

int main()
{
    int i = 0;//
    int count = 0;
    for (i = 101; i <= 200; i++)
    {
        //判断i是否为素数
        //2->i-1
        int j = 0;
        for (j = 2; j <= i / 2; j++)
        {
            if (i%j == 0)
            {
                break;
            }
        }
        //...
        if (j>i / 2)
        {
            count++;
            printf("%d ", i);
        }
    }
    printf("\ncount = %d\n", count);
    return 0;
}

image.gif

方法二还是包含了一些重复的数据,再优化:

方法三:

如果i能够被[2, sqrt(i)]之间的任意数据整除,则i不是素数

原因:如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于sqrt(m),另一个大于或等于 sqrt(m)。

int main()
{
    int i = 0;
    int count = 0;
    for (i = 101; i <= 200; i++)
    {
        //判断i是否为素数
        //2->i-1
        int j = 0;
        for (j = 2; j <= sqrt(i); j++)
        {
            if (i%j == 0)
            {
                break;
            }
        }
        //...
        if (j>sqrt(i))
        {
            count++;
            printf("%d ", i);
        }
    }
    printf("\ncount = %d\n", count);
    return 0;
}

image.gif

方法4:

继续对方法三优化,只要i不被[2, sqrt(i)]之间的任何数据整除,则i是素数,但是实际在操作时i不用从101逐渐递增到200,因为出了2和3之外,不会有两个连续相邻的数据同时为素数

int main()
{
    int i = 0;
    int count = 0;
    for (i = 101; i <= 200; i += 2)
    {
        //判断i是否为素数
        //2->i-1
        int j = 0;
        for (j = 2; j <= sqrt(i); j++)
        {
            if (i%j == 0)
            {
                break;
            }
        }
        //...
        if (j>sqrt(i))
        {
            count++;
            printf("%d ", i);
        }
    }
    printf("\ncount = %d\n", count);
    return 0;
}

image.gif

如果各位大佬有更好的方法,欢迎评论留言。

相关文章
|
1月前
|
算法 搜索推荐 程序员
C语言第十三练——输入一个正整数,判断这个数是否是素数
C语言第十三练——输入一个正整数,判断这个数是否是素数
38 0
|
4月前
|
C语言
C语言练习---【求素数】(一篇带你掌握素数求解)
C语言练习---【求素数】(一篇带你掌握素数求解)
53 0
C语言练习---【求素数】(一篇带你掌握素数求解)
|
5月前
|
C语言
C语言:写一个代码,使用 试除法 打印100~200之间的素数(质数)-2
思路二: 总体思路: 因为偶数除了 2 都不是素数,且题目范围中没有 2 , 所以可以只生成 100~200 之间的奇数,可以排除一半的数字, 效率提升一倍。
|
5月前
|
C语言
C语言:写一个代码,使用 试除法 打印100~200之间的素数(质数)-1
思路一:使用试除法 总体思路: (一). 使用外循环:生成 100~200 之间的数。 (二). 设置内循环:生成 2 ~ i-1 的数。
|
5月前
|
Java C语言
显示输出2~100中的素数,每行显示5个数 java 和 c语言
显示输出2~100中的素数,每行显示5个数 java 和 c语言
113 0
|
5月前
|
C语言
C语言一个判断素数的函数fun,在主函数中计算1000以内所有素数的平均值并输出
C语言一个判断素数的函数fun,在主函数中计算1000以内所有素数的平均值并输出
59 0
|
5月前
|
C语言
在C语言中如何打印某个范围中满足某些条件的数(素数,闰年,水仙花数等)
在C语言中如何打印某个范围中满足某些条件的数(素数,闰年,水仙花数等)
53 0
|
6月前
|
C语言
C语言:输出100以内的素数
题目:输出100以内的素数 背景:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 思路:采用两个 for 循环,一个遍历100以内的数,一个判断素数,采用开方的形式(sqrt)。
130 0
|
10月前
|
C语言
C语言 打印100~200之间的素数
在实现代码之前,我们要明确什么是素数? 所谓素数就是质数,只能被1和它本身整除的数字
|
11月前
|
C语言
C语言(素数)[解法]:编写prime(m)判断m是否为素数,当m为素数返回1,否则返回0;
C语言(素数)[解法]:编写prime(m)判断m是否为素数,当m为素数返回1,否则返回0;
161 0
相关产品
云迁移中心
推荐文章
更多