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

问题描述

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

// 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;  //用于从界面输出所有模数的乘积

}

时间: 2024-08-31 09:49:07

c++-初学者,,,问个简单问题,,关于中国剩余定理的的相关文章

用c++编写一个类输出100到200的素数,对不起我是刚学的c++,问一些简单的问题!

问题描述 用c++编写一个类输出100到200的素数,对不起我是刚学的c++,问一些简单的问题! #include#include#includeusing namespace std;class Prime{private: int a[25]; int n1n2; int num;public: Prime(int n1int n2int num); void primef(); void show();};Prime::Prime(int m1int m2int n):n1(m1)n2(m

new-Java初学者,一个简单的问题

问题描述 Java初学者,一个简单的问题 import java.io.*; public class Test{ public static void main(String args[]){ File f=new File("document","old"); File d=new File("target"); d.mkdir(); d.renameTo(new File("target","new"

java小问题-初学者问个关于java的小问题

问题描述 初学者问个关于java的小问题 char c = str.charAt(i); 这个语句是什么意思???求解答(谢谢!!) 解决方案 声明一个char型变量c,它的值是str的第i个位置的字符 解决方案二: 字符型c等于 str字符串的第i个元素 解决方案三: java小问题java中的小问题java 小问题 解决方案四: 同意楼上解答.这些都是非常非常基础的JAVA知识. 解决方案五: 声明一个char型变量c,它的值是str字符串的第i个位置的字符. 至于你说的,"不应该是Stri

指针-初学者问一个关于c语言结构体的问题

问题描述 初学者问一个关于c语言结构体的问题 结构体中指针和数组有什么不同? 我定义了这么一个结构体: struct word { char*word1; int line[1000]; }; struct word danci 然后用一个函数getword读取输入并给该结构体赋值,具体是怎么样就不写了 getword(danci,100); 然后 printf("%d",danci.line[0]); 但是这句报错了,原因是struct word danci没有初始化 但是我把结构体

多谢-C#初学者菜鸟的简单问题

问题描述 C#初学者菜鸟的简单问题 Response.Redirect("ScUserSmallDetail.aspx?smallId=" + scUserSmlId) 哪位大神能告诉我 括号里里的内容是干什么的 还有那个 ? 的作用是什么 解决方案 Response.Redirect,重定向到另一个网页,括号中是地址.包含一个参数,smallId 在ScUserSmallDetail.aspx中,可以用Request.QueryString["smallId"]得

初学者问一个关于c中二级指针与结构体的问题

问题描述 初学者问一个关于c中二级指针与结构体的问题 #include #include typedef struct node{ int num; char ch; }NODE; int main(void){ int n,i; NODE F; printf("input n:"); scanf("%d",&n); F=(NODE)malloc(n*sizeof(NODE*)); printf("input num and ch:");

r语言-R初学者问导入数据,谢谢!

问题描述 R初学者问导入数据,谢谢! 我有一个表格在桌面word里,但需要用R语言来处理表中数据,怎么导入数据?除了敲进去...转成txt再放工作目录里就乱码了.

问一个简单的问题,在winform中怎么不涉及到数据库对dgv里数据进行增删改操作呢?

问题描述 问一个简单的问题,在winform中怎么不涉及到数据库对dgv里数据进行增删改操作呢? 还有怎么同时把dgv里数据保存到数据库.我要代码,新增的最好有实体类的代码

问一个简单的问题ASP.NET 连接的

问题描述 问一个简单的问题ASP.NET 连接的 inline code< 详细 inline code 这句话什么意思啊