花非花雾非雾尼 2013-09-27 12:43 采纳率: 0%
浏览 1015

初学者,,,问个简单问题,,关于中国剩余定理的

// Algorithm.cpp: implementation of the CAlgorithm class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Algorithm.h"
#include
#include
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
#define bigint __int64

CAlgorithm::CAlgorithm()
{
result_x = 0; //初始化
result_n = 0;
}

/******************************************************
//根据欧几里德(辗转相除)算法求两个数的最大公约数
//函数返回a、b的最大公约数
//选择迭代或递归方法完成
/******************************************************

/*************************************
迭代方法
***************************************/
/*int CAlgorithm::Greatest_Common_Divisor( int a,int b )

{
while (b!=0)
{
int temp=b;
b=a%b;
a=temp;
}
return a; //余数r=0那一步的除数
}*/

/***************************************
递归方法
***************************************/
int CAlgorithm::Greatest_Common_Divisor(int a, int b)
{
int r,q;
do
{
q=a/b;
r=a-q*b;
a=b;
b=r;
}while(r!=0);
return a ;

}

/*****************************************************************
//利用两个数最大公约数与最小公倍数乘积和两数乘积的关系求最小公倍数
//函数返回a、b的最小公倍数
*****************************************************************/
int CAlgorithm::Least_Common_Multiple ( int a,int b )

{
int Product=a*b;
while (b!=0)
{
int temp=b;
b=a%b;
a=temp;
}
return Product/a;
}

/*****************************************************************
//由相关定理、引理知:gcd(a,b)=gcd(b,a%b)=xa+yb
//当gcd(a,b)=1时,a模b的逆存在且唯一
//同时gcd(a,b)=1=xa+yb中a的系数x即为a模b的逆
//要求以下函数使用递归方法返回a模b的逆
//需要掌握的技巧:函数“值传递”与“引用传递”的不同
*****************************************************************/
int CAlgorithm::Extended_GCD(int a,int b,int &gcd,int &x, int &y )

{

//请补充代码








if(gcd==1) 
    return ( x + b ) % b;
else 
    return -9999;

}

/*******************************************************************************************************
//形如 x ≡ ai的线性同余方程组,若m[i]两两互素则方程组有解,以所有模数乘积取模,解唯一
令mm=m[0]*m[1]*....m[FuncNum-1]
通过调用Extended_GCD函数求解每一个方程中M[i]模m[i]的逆,用y[i]表示
根据中国余数定理求解方程组在0-mm之间的唯一解

参数解释:FuncNum代表方程个数,数组a[], m[]与方程x ≡ ai的系数分别对应
******************************************************************************************************/

void CAlgorithm::solModularEquations( int FuncNum,int a[],int m[])
{
int i, j;
int mm=1,x=0;// x用于存放求和结果
int M[100], y[100];
int gcd1, x1, y1; // Extended_GCD的实参
IsCoprime = true; //互素标志,初始化为true

//    (1)判断方程组中的模m[i]是否两两互素

for ( i=0; i<FuncNum-1; i++ )
{
    for ( j=i+1; j<FuncNum; j++ )
    {
        if ( /*////////////////////////////*/ )
            continue;
        else
        {
            IsCoprime = false;  //不是两两互素,令IsCoprime为false
            return;
        }
    }
}

//    (2) 运用中国剩余定理求x的值



       //请补充代码






result_x = x%mm;//用于从界面输出方程组在0-mm之间的唯一解
result_n = mm;  //用于从界面输出所有模数的乘积

}

  • 写回答

1条回答

  • 刘李赟果 2023-02-03 15:43
    关注

    你问题是什么

    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型