(华为OJ)C 语言—素数伴侣(匈牙利算法)

该博客介绍了如何使用C语言解决华为OJ中的素数伴侣问题,通过匈牙利算法找到奇数和偶数的最优组合,使得它们的和为质数。博主提供了详细的解题思路,包括将数字按奇偶性分开,判断质数,并应用匈牙利算法进行匹配。代码注释详细解释了匈牙利算法的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目要求:
在这里插入图片描述
解题思路:
1)首先质数是一个奇数和偶数的和,将整数分为两个数组各自存放奇数和偶数;
2)判断哪些奇数和偶数相加为质数,标记在二维数组中;
3)为了生成最多的搭配方法,这里用匈牙利算法去解(详细解法见代码备注,备注中详细写了如何用匈牙利算法,若还是不懂的见https://blog.youkuaiyun.com/dark_scope/article/details/8880547)

代码如下:

/************************************************************************
*      文件名:Primemate
*      文件功能描述:素数伴侣
*      文件作者名:Mr_han QQ:785937095
*      说明:
*       1、若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”
*       2、从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”
*       3、能组成“素数伴侣”最多的方案称为“最佳方案”
**************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LONG long
#define CHAR char
#define N 100

LONG odd[N], even[N];        /*因为质数必然是一个奇数和偶数的和,odd用来存放奇数,even用来存放偶数*/
LONG line[N][N];             /*若odd[i]+even[j]得到质数,则line[i][j]=1,否则为0*/
LONG n, a, b;

/*质数判断*/
LONG Pri
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值