首页 置换 选车 估价 问答 生活 经销商 车管所 汽车资讯 汽车销量 车牌查询 今日油价 天气预报
您的位置: 首页 > 生活 > 生活 > 两个正整数最大公约数怎么求(C模数素数)
两个正整数最大公约数怎么求(C模数素数)
更新时间:2024-07-08 07:09:31

两个正整数最大公约数怎么求?“模”是指一个计量系统的计数范围如时钟等计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”例如:,下面我们就来说一说关于两个正整数最大公约数怎么求?我们一起去了解并探讨一下这个问题吧!

两个正整数最大公约数怎么求(C模数素数)1

两个正整数最大公约数怎么求

1 模数

“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。例如:

时钟的计量范围是0~11,模=12。表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。

“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。

例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6;另一种是顺拨8小时:10 8=12 6=6

在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。

对于16进制,16就是这个进制系统中的模,其使用的字符只有:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。

对于8进制,8就是这个进制系统中的模,其使用的字符只有:0,1,2,3,4,5,6,7。

对于2进制,2就是这个进制系统中的模,其使用的字符只有:0,1。

对于计算机,其概念和方法完全一样。n位计算机,设n=8, 所能表示的最大数是11111111,若再加1成为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系统的模为2^8。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。

2 素数

质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。

int isPrime(int n) { if(n<= 1)// 小于等于1的整数不可能是素数 return 0; if(n == 2); // 2 是素数 return 1; if(n%2 == 0); // 能被2整除的其他整数都不是素数 return 0; int limit = (int)sqrt((double)n) 1; for(int i = 3; i <= limit; i=i 2) { if(n % i == 0) return 0; } return 1; }

isPrime没有必要枚举所有的因子。

I 只要发现任何一个大于1小于n的因子,就能停下来报告n不是素数。

II 如果n能被2整除,直接报告n不是素数。如果n不能被2整除,那么它也不可能被4或6或其他偶数整除。因此,isPrime只需要检查2和奇数(由3开始,步长为2)。但注意有个特例,2能被2整除,但2是素数。

III 如果n不是素数,则必有一个因子小于√n 。因此不需要检查到n为止。只需检查到n 。

因为如果n能被2~n-1之间任一整数整除,其二个因子必定有一个小于或等于√n,另一个大于或等于√n。例如24可以表示为:2*12、3*8、4*6,前面的因子小于√24,后面的因子大于√24,检验出了小因子,即可判断n是否为素数,就像逻辑运算的短路求值。

3 用辗转相除法(又名欧几里德算法)求最大公约数和最小公倍数

设c是a、b的最大公约数,记为c=gcd(a,b),a>=b

令r=a mod b

要证明b与r的最大公约数也是c

设a=kc,b=jc,则k、j互素,否则c不是最大公约数。

设m为任一整数。

据上,r=a-mb=kc-mjc=(k-mj)c

可知r也是c的倍数,且k-mj与j互素,否则与前述k,j互素矛盾。

由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b)。

这样就可以通过不断求余、不断互换,直到余数为零,最后的结果就是最大公约数。

I a ÷ b,令r为所得余数(0≤r )

II 互换:置 a←b,b←r,并返回第一步。

最小公倍数=两数之积除于它们的最大公约数。

实例:

输入两个正整数m和n,求其最大公约数和最小公倍数。

#include<iostream> using namespace std; int isPrime(int n); int main() { int a,b,t,r; printf("请输入两个数字:\n"); scanf("%d %d",&a,&b); if(a<b) {t=b;b=a;a=t;} r=a%b; int n=a*b; while(r!=0) { a=b; b=r; r=a%b; } printf("这两个数的最大公约数是%d,最小公倍数是%d\n",b,n/b); system("pause"); return 0; } /*请输入两个数字: 18 24 这两个数的最大公约数是6,最小公倍数是72 /* 同样对于两个数1,000,005和1,000,000,用欧几里得算法只需要执行两次循环体。

-End-

,
相关推荐RECOMMEND
检讨书 模板(检讨书样本)
检讨书模板?今天上班的时候和同事聊天同事说到男朋友给她写的检讨书笑死了,我们一起讨论研究了下,下面我们就来聊聊关于检讨书模板?接下来我们就一起去了解一下吧!检讨书模板今天上班的时候和同事聊天。同事说到...
专升本概率最大的专科院校(大专院校前50名榜单)
最近有很多家长、考生都在问我关于本科考不上的话,专科哪所学校最好呢?笔者思考了一下,查阅了一些资料,其实专科大学因为涉及到资料稀少,而且大部分资料均是本科院校的排名,所以只能按照最近些年录取分数线及网...
对肺结核的预防要怎么做(生活中要怎么做才可以预防肺结核)
大家都听说过肺结核这种病,因为它作为一种传染病,传染性不仅极强,而且十分难治。如今医学进步很大,也能治好该疾病了。但是既然是疾病,危害依然有。那我们平时在日常生活中要怎么做才可以预防肺结核,免受它的危...
不要用力揉眼(浅摸一下可不能)
记得曾经在微博上看到了一个小姐姐在接吻时摸男朋友喉结却摸出了一系列祸端的叙述:“我一直对男朋友的喉结超级感兴趣,但他一直不让我摸。但你们也知道,人一旦对一件事产生了浓厚的兴趣,就算条件凑不到天时地利人...
半三不四是何意思(不三不四中的三)
现代汉语中,“不三不四”这个成语的意思指地是“不务正业”,但其中的“三”和“四”到底指地是什么,却没有明确的定义。按古汉语的解释,“不三不四”中的“三”和“四”源于《易经》。《易经》每卦有六爻,其中的...
(灵魂都要经历哪些才能轮回转世)
都说人死了之后有轮回,但是你知道要怎样才能轮回吗?你知道地府其实有好多阎王吗?佛家说地府里一共有10个殿,每个殿里都有一位阎王,他们分别掌管着不同的职能,人死后会先来到第一殿,接受第一殿阎王的审判,这...