[Langage C] Trois façons de trouver des nombres premiers

Conseils : /* Cet article est uniquement destiné à l'apprentissage et au partage. S'il y a des lacunes, merci de m'envoyer un message privé pour amélioration*/


Définition des nombres premiers

1. Les nombres premiers sont également appelés nombres premiers. Un nombre premier fait référence à « un nombre supérieur à 1 qui n'est divisible que par 1 et le nombre lui-même ».
2. Un nombre premier peut également être exprimé de manière équivalente comme : « un nombre compris dans la plage des entiers positifs qui est supérieur à 1 et qui n'a que deux diviseurs : 1 et lui-même ».


Trouver des nombres premiers entre 100 et 200

提示:以下是本篇文章正文内容,下面案例可供参考

Voici une question, en prenant cette question comme exemple :

Trouvez les nombres premiers entre 100 et 200 et calculez combien de nombres premiers il y a dans cette plage ?

La première possibilité

# include <stdio.h>
int main()
{
    
    
	
	int i;
	//先求出100-200之间的所有的数
	//这里给出一个for循环
	int count = 0;
	for(i = 100; i < 200; i++)
	{
    
    
		int j; //定义一个变量j用来表示因子
		for( j = 2; j < i ;j++) //用 2 到 i-1 之间的因子去试除i
		{
    
    
			if(i % j ==0)
			{
    
    
				break; //若能整除,则说明一定不是素数,跳出循环
			}
		}
		//当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环
		if (j == i) //此时因子i等于一个数本身,则说明是素数
		{
    
    
			count++;
			printf("%d ",i);//打印素数
		}
	}
	printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数

return 0;
}

Deuxième option

Cette solution est similaire à la précédente. Un drapeau est défini pour le marquer. S'il vaut 1, cela signifie un nombre premier, et s'il vaut 0, cela signifie que ce n'est pas un nombre premier.

# include <stdio.h>
int main()
{
    
    
	
	int i;
	//先求出100-200之间的所有的数
	//这里给出一个for循环
	int count = 0;
	for(i = 100; i < 200; i++)
	{
    
    
		int j; //定义一个变量j用来表示因子
 
		int flag = 1;//此时定义一个flag标记,表示假设i是素数
		for( j = 2; j < i ;j++) //用 2 到 i-1 之间的因子去试除i
		{
    
    
			if(i % j ==0)
			{
    
    
				flag = 0;若能整除,则说明一定不是素数,把flag置为0
				break; 
			}
				
		}
		//当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环
		if (flag == 1) //此时判断如果flag还是为1,则说明i是素数
		{
    
    
			count++;
			printf("%d ",i);//打印素数
		}
	}
	printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数

return 0;
}

Troisième option

# include <stdio.h>
# include <math.h>
int main()
{
    
    
	
	int i;
	//先求出100-200之间的所有的数
	//这里给出一个for循环
	int count = 0;
	for(i = 101; i < 200; i += 2) // 因为偶数一定不是素数,这里缩小范围,在奇数中去找素数
	{
    
    
		int j; //定义一个变量j用来表示因子
 
		int flag = 1;//此时定义一个flag标记,表示假设i是素数
		
		//假设一个数m= a*b,那么这个数m它的因子a和b中一定至少有一个因子小于等于m的开平方数
		//拿12这个数来说   它的因子所有表示如下: 12=1*12=2*6=3*4=4*3=6*2=12*1
		//12的开平方数是2√3(2倍的根3),  2√3是大于3小于4的,那么用1,2,3去试除12之后,那么4,6,12就没必要再去试除12了
		//所以这里的因子范围给到 3 到 sqrt(i) ,sqrt()是C语言的一个库函数,用来求给定值的平方根,需要引用头文件<math.h>
		for( j = 2; j <= sqrt(i) ;j++)  
		{
    
    
			if(i % j == 0)
			{
    
    
				flag = 0;若能整除,则说明一定不是素数,把flag置为0
				break; 
			}
				
		}
		//当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环
		if (flag == 1) //此时判断如果flag还是为1,则说明i是素数
		{
    
    
			count++;
			printf("%d ",i);//打印素数
		}
	}
	printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数

return 0;
}

Je suppose que tu aimes

Origine blog.csdn.net/qq_63320529/article/details/128185270
conseillé
Classement