易截截图软件、单文件、免安装、纯绿色、仅160KB

c实现的求两个数的乘法逆元

定义:设a对b的乘法逆元是x则可以记为a*x=1 mod b,即a和x的积除以b的余数是1;
 
乘法逆元常用算法是欧几里德算法:
 
//算法求d关于模f的乘法逆元d-1 ,即 d* d-1 mod f = 1
 
  1 。(X1,X2,X3) := (1,0,f); (Y1,Y2,Y3) := (0,1,d)
  2。 if (Y3=0) then return d-1 = null //无逆元
  3。 if (Y3=1) then return d-1 = Y2 //Y2为逆元
  4。 Q := X3 div Y3 //整除
  5。 (T1,T2,T3) := (X1 - Q*Y1,X2 - Q*Y2,X3 - Q*Y3)
  6 。(X1,X2,X3) := (Y1,Y2,Y3)
  7。 (Y1,Y2,Y3) := (T1,T2,T3)
8。 goto 2
 
常用于加密算法中,如仿射算法。
 
采用扩展欧几里德算法
 
首先,欧几里德算法又称辗转相除法,用于求最大公约数,算法如下:
int Gcd(int a, int b)
{
    if(b == 0)
        return a;
    return Gcd(b, a % b);
}
 
求一个数对另一个数的乘法逆元算法如下:
Typedef unsigned short int uint16;
uint16 mulinv(uint16 b,uint16 a)      //求一个整数b对a的乘法逆元
{
    int x1,x2,x3;
    int y1,y2,y3;
    int t1,t2,t3;
    x1=1;
    x2=0;
    x3=a;
    y1=0;
    y2=1;
    y3=b;
    int k;
    for(t3=x3%y3;t3!=0;t3=x3%y3){
        k=x3/y3;
        t2=x2-k*y2;
        t1=x1-k*y1;
        x1=y1;
        x2=y2;
        x3=y3;
        y1=t1;
        y2=t2;
        y3=t3;
    } 
    if(y2<0)
        y2+=a;
    if(y3==1)
        retu


相关文档:

(c primer plus第五版) 学习笔记

第二章 c语言概述
一个简单的实例
#include <stdio.h>
int main(void)
{
   int num;   /*定义变量num*/
      num = 1;  /*给变量num赋值*/
 
      printf("I am a simple"); /*使用printf()函数*/
   & ......

华为C/C++笔试题(附答案,华为面试题系列)

1.static有什么用途?(请至少说明两种)
    1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
    2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
    ......

C的函数指针实现C++的多态

C的函数指针很强大,用好了才是C语言的高手。像Gtk中的回调函数的使用,都体现了函数指针的强大威力。
struct Point{
int x, y;
};
/*Shape*/
/*----------------------------------------------------------------*/
struct Shape {
struct Methods* methods;
};

struct Meth ......

嵌入式C/C++面试题汇总解答(II)

 (本文源自http://www.weste.net/2006/2-20/13432127659.html )  
许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号