判断和数是否为两个质数相乘而得的具体方法

关于如何判断一个和数是否是质数相除而得

在此之前,虽然判断质数的方法已经人尽皆知,CSDN中也有很多论述如何用c判断一个数是否为质数的文章,但是我还是再次简单的提一下,质数判断的主流方法是用一个数除以2到他的平方根,如果这中间没有一个数被除尽,那么这个数即为质数。
#include <stdio.h>
#include <math.h>

int main(void)//判断一个数是否为质数,只需要用这个数依次除以2到这个数的平方根(因为两个公因数必定一大一小,极限时恰为平方根),若除不尽,则为质数。
{
	int  n,cishu, quyu;//cishu表示质数运算的被除数,_n表示n的平方根

	double _n;

	int jieguo=1;//表示结果

	scanf_s("%d", &n);

	_n = (int)sqrt(n);//求平方根
	/*printf("%lf\n", _n);*/

	for (cishu = 2; cishu <= _n; cishu++ )
	{
		quyu = n % cishu;

		if (quyu == 0)
		{
			printf("N");
			jieguo = 0;
			break;
		}


	}
	if  (jieguo==1)

	printf("Y");

	return 0;
}

以上就是判断一个数是否为质数的一个程序,而要判断一个和数是否为质数的直接后代(由两个相乘而得),也可以利用这种判断方法。
思路是:先利用合数除以一个质数,并储存其结果,然后利用结果是否为质数来判断,以下是具体的程序代码:

#include <stdio.h>
#include <math.h>

int main(void)//程序思路:先利用检测数来除一个质数,若除尽,再判断结果是否为质数
{
	int zhishu,jieguo,shibie=1,_shibie, n,jianceshu,cishu,cishu2,cishu3,panduan1=0,panduan2=0,zuizhongjieguo=0;
	
	int zhishu2,pinfanggen;


	int pinfanggen2;

	//scanf_s("%d", &n);//n表示下方要检测的数据个数(现在未启用)
	//for (cishu = 0; cishu <= n; cishu++)//
	//{

		scanf_s("%d", &jianceshu);

		

		for (zhishu = 3; zhishu <= 5000; zhishu++)//计算5000以内的所有质数,不要从2开始调用,因为容易发生冲突。
		{

			//zuizhongjieguo = 0;//让每次运算zuizhongjieguo初始值相同

			pinfanggen = (int)sqrt(zhishu)+1;//求质数的平方根

			shibie = 1;

			for (cishu2 =2; cishu2 <= pinfanggen; cishu2 ++)//质数判断过程
			{
				jieguo = zhishu % cishu2;

				//目的是让每个质数所取得的panduan2值相互独立

				if (jieguo == 0)//若除尽,则不是质数,不再运算
				{
					shibie = 0;
					break;
					
				}

			}
			
			jieguo = jianceshu % 2;
			if (jieguo == 0)
			{
				panduan2 = jianceshu / 2;//为了补全没有质数2冲突的情况

				if (panduan2 == 2 && zuizhongjieguo==0)//同理,补充没有质数2的情况
				{
					printf("Yes");
					zuizhongjieguo = 1;
				}
				for (zhishu2 = 3; zhishu2 <= 5000; zhishu2++)//调用5000以内的质数,方法同上,一样要注意2会发生冲突
				{

					pinfanggen2 = (int)sqrt(zhishu2) + 1;//目的是防止2时开方结果为1

					_shibie = 1;//先假定为质数

					for (cishu3 = 2; cishu3 <= pinfanggen2; cishu3++)
					{


						jieguo = zhishu2 % cishu3;//用余数是否为0来判断质数,这里调用了上一次的变量储存
						if (jieguo == 0)
						{
							_shibie = 0;
							break;
						}

					}

					if (_shibie == 1 && panduan2 == zhishu2 && panduan1 == 0)//前一个条件判断质数,后一个判断为两个质数相乘而得
					{
						printf("Yes");//输出Yes
						zuizhongjieguo = 1;
						panduan1 = 1;
						break;

					}

				}//2的情况完毕
			}


			

			if (shibie ==1 && zuizhongjieguo==0)//用质数2未判断成功的情况
			{
				panduan1 = jianceshu %zhishu;

				if (panduan1 ==0)//如果除尽,则继续判断结果是否为质数
				{

					panduan2 = jianceshu / zhishu;//用panduan2储存商值

				}
				
				
				for (zhishu2 = 3; zhishu2 <=5000; zhishu2++)//调用5000以内的质数,方法同上
				{

					pinfanggen2 = (int)sqrt(zhishu2)+1;//目的是防止2时开方结果为1

					_shibie = 1;//先假定为质数

					for (cishu3 = 2; cishu3 <= pinfanggen2; cishu3++)
					{


						jieguo = zhishu2 % cishu3;//用余数是否为0来判断质数,这里调用了上一次的变量储存
						if (jieguo == 0)
						{
							_shibie = 0;
							break;
						}

					}

					if (_shibie == 1 && panduan2 == zhishu2)//前一个条件判断质数,后一个判断为两个质数相乘而得
					{
						printf("Yes");//输出Yes
						zuizhongjieguo = 1;
						break;

					}
				}
			}


		}

		if (zuizhongjieguo == 0)//判断不是质数后代
		{
			printf("No");
		}
	
	//}
	return 0;
	}

这样一来,就可以顺利的判断一个合数是否为质数的直接后代了。

判断两个字典和组互相嵌套的对象是否相同,可以使用Python内置的`==`运算符进行比较。 如果要判断两个字典是否相同,可以直接使用`==`运算符进行比较,如下所示: ```python dict1 = {"a": 1, "b": 2, "c": {"d": 3, "e": [4, 5]}} dict2 = {"a": 1, "b": 2, "c": {"d": 3, "e": [4, 5]}} if dict1 == dict2: print("两个字典相同") else: print("两个字典不同") ``` 如果要判断两个是否相同,也可以使用`==`运算符进行比较,如下所示: ```python list1 = [1, 2, [3, 4], {"a": 5, "b": [6, 7]}] list2 = [1, 2, [3, 4], {"a": 5, "b": [6, 7]}] if list1 == list2: print("两个组相同") else: print("两个组不同") ``` 如果要判断两个字典或组嵌套的对象是否相同,可以使用递归的方式进行比较。例如,下面的代码可以判断两个字典嵌套的对象是否相同: ```python def dict_compare(dict1, dict2): if isinstance(dict1, dict) and isinstance(dict2, dict): if len(dict1) != len(dict2): return False for key, value in dict1.items(): if key not in dict2: return False if not dict_compare(value, dict2[key]): return False return True else: return dict1 == dict2 dict1 = {"a": 1, "b": 2, "c": {"d": 3, "e": [4, 5]}} dict2 = {"a": 1, "b": 2, "c": {"d": 3, "e": [4, 5]}} if dict_compare(dict1, dict2): print("两个字典嵌套的对象相同") else: print("两个字典嵌套的对象不同") ``` 同样的,下面的代码可以判断两个组嵌套的对象是否相同: ```python def list_compare(list1, list2): if isinstance(list1, list) and isinstance(list2, list): if len(list1) != len(list2): return False for i in range(len(list1)): if not list_compare(list1[i], list2[i]): return False return True else: return list1 == list2 list1 = [1, 2, [3, 4], {"a": 5, "b": [6, 7]}] list2 = [1, 2, [3, 4], {"a": 5, "b": [6, 7]}] if list_compare(list1, list2): print("两个组嵌套的对象相同")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值