C语言之素数进化论

文章讲述了如何使用C语言的基本循环结构检测100-200之间的素数,并逐步优化算法,从最初的复杂度较高到利用平方根特性简化过程,最后将代码封装为函数。作者还强调了算法效率在编程中的重要性,以及个人生活与学习的平衡点
摘要由CSDN通过智能技术生成

最近,有人给我私信问我怎么用C语言求素数!!!

于是乎我这个码龄1年的小萌新就来解决他的问题。

素数,也称质数,是指只能被1和自身整除的正整数。在大于1的自然数中,2是最小的素数,其他的素数依次为3、5、7、11、13、17、19、23……。素数的特点是除了1和自身之外没有其他因数。因此,素数无法被其他数整除,也不能被分解为其他的乘积。素数在数论和密码学等领域有重要的应用。

先举个栗子100——200之间的素数。

说到素数大家一定会先这么写:

#define CRT SECURE NO WARNINGS
#include<stdio.h>
int main()
{
    int i = 0;
    int count = 0;
    for(i = 100;i <= 200;i++)
    {
        int flat = 1;
        int j = 0;
        for(j = 2;j < i;j++)
        {
            if(i % j == 0)
            {
                flat = 0;
                break;
            }
        }
        if(flat == 1)
        {
            count++;
            printf("%d ",i);
            
        }
    }

    printf("\ncount=%d\n",count);
    return 0;
}

#define CRT SECURE NO WARNINGS
#include<stdio.h>
int main()
{
	int i = 0;
	int count = 0;
	for(i = 100;i <= 200;i++)
	{
		int flat = 1;
		int j = 0;
		for(j = 2;j < i;j++)
		{
			if(i % j == 0)
			{
				flat = 0;
				break;
			}
		}
		if(flat == 1)
		{
			count++;
			printf("%d ",i);
			
		}
	}

	printf("\ncount=%d\n",count);
	return 0;
}

但这个复杂度有点高!

如果了解素数,就知道不是素数的数一定可以被小于它开方后的整数整除,所以————嘿嘿!

#define CRT SECURE NO WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
    double i = 0;
    int count = 0;
    for(i = 100;i <= 200;i++)
    {
        int flat = 1;
        int j = 0;
        for(j = 2;j <= sqrt(i);j++)
        {
            if(int(i) % j == 0)
            {
                flat = 0;
                break;
            }
        }
        if(flat == 1)
        {
            count++;
            printf("%d ",int(i));
            
        }
    }

    printf("\ncount=%d\n",count);
    return 0;
}

#define CRT SECURE NO WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
	double i = 0;
	int count = 0;
	for(i = 100;i <= 200;i++)
	{
		int flat = 1;
		int j = 0;
		for(j = 2;j <= sqrt(i);j++)
		{
			if(int(i) % j == 0)
			{
				flat = 0;
				break;
			}
		}
		if(flat == 1)
		{
			count++;
			printf("%d ",int(i));
			
		}
	}

	printf("\ncount=%d\n",count);
	return 0;
}

不,这还是不让计算机偷懒!!!

对了,差点忘了,好像偶数里只有2是素数!!!所以————吼吼!

#define CRT SECURE NO WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
double i = 0;
int count = 0;
for(i = 101;i <= 200;i+=2)
{
    int flat = 1;
    int j = 0;
    for(j = 2;j <= sqrt(i);j++)
    {
        if(int(i) % j == 0)
        {
            flat = 0;
            break;
        }
    }
    if(flat == 1)
    {
        count++;
        printf("%d ",int(i));
            
    }
}

printf("\ncount=%d\n",count);
return 0;
}

#define CRT SECURE NO WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
double i = 0;
int count = 0;
for(i = 101;i <= 200;i+=2)
{
	int flat = 1;
	int j = 0;
	for(j = 2;j <= sqrt(i);j++)
	{
		if(int(i) % j == 0)
		{
			flat = 0;
			break;
		}
	}
	if(flat == 1)
	{
		count++;
		printf("%d ",int(i));
			
	}
}

printf("\ncount=%d\n",count);
return 0;
}

这样就好了嘛,不不不,我还要把他变成函数。

#define CRT SECURE NO WARNINGS
#include<stdio.h>
#include<math.h>

int is_prime(double(n))
{
    int j = 0;
    for(j = 2;j <= sqrt(n);j++)
    {
        if(int(n) % j == 0)
        {
            return 0;
        }
    }
    return 1;
}

int main()
{
    double i = 0;
    int count = 0;
    for(i = 101;i <= 200;i+=2)
    {
        if(is_prime(i) == 1)
        {
            count++;
            printf("%d ",int(i));
        }
    }

    printf("\ncount=%d\n",count);
    return 0;
}

#define CRT SECURE NO WARNINGS
#include<stdio.h>
#include<math.h>

int is_prime(double(n))
{
	int j = 0;
	for(j = 2;j <= sqrt(n);j++)
	{
		if(int(n) % j == 0)
		{
			return 0;
		}
	}
	return 1;
}

int main()
{
	double i = 0;
	int count = 0;
	for(i = 101;i <= 200;i+=2)
	{
		if(is_prime(i) == 1)
		{
			count++;
			printf("%d ",int(i));
		}
	}

	printf("\ncount=%d\n",count);
	return 0;
}

嘿嘿轻松解决!

其实还能再加,但本猿要期末了!!!呜—呜——呜—呜呜呜呜——————

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞莲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值