| 关于大数的质因数分解 |
|
|
|
|
对于一个大数,首先斟酌它是否是一个质数(即素数,除了1和它自己以外不再能被其他自然数整除),这个已经比拟麻烦了。假如它不是质数(即是合数时)再斟酌质因数分解,魔兽私服发布论坛。 现在斟酌大数的质因数分解的算法实现。目前没有明白的思路,魔兽有私服吗,盼望看到的人能给我供给辅助。 一个有益的东西,求两个数的最至公约数。 辗转相除法(欧几里德算法): 调用这个函数必需是a>=b int gcd(int a, int b) { int c; if(b=0)return a; for(c = a%b; c>0; c = a%b) { a=b; b=c; } return b; } 对于大数,~~你是我一生最爱的人!《伤感》,这个算法存在一个缺点,超过盘算机芯片位数的数据的模运算须要自己实现,峰回路转,且效力极其低下,改用以下算法(stein算法): int gcd(int a, int b) { if (a<b) { int c=a; a=b; b=c; } if (b==0) return a; if (a%2 == 0) if (b%2 == 0) return 2*gcd(a/2, b/2); else return gcd(a/2,b); else if (b%2 == 0) return gcd(a, b/2); else return gcd((a+b)/2,(a-b)/2); }由于除以2是移位运算,模2只须要简略断定最低位,所以这个算法对于大数效力非常高。 好了,回到我们的问题,大数的质因数分解,人生小语。由于有了这个取最至公约数的算法,我们现在须要做的事就是在最短的时光内找到一个数与大数的最至公约数不为1,然后持续寻找。 特殊地:对于偶数,2确定是它的质因数,所以直接提取出2。 对于寻找这个数有个思路: a/2 和 a/2+1 或者a的平方根取整和再加一的数。 待续。
|
|
|
|
|
| 完美世界,喜剧网游,网络游戏,3D网游,永久免费网游,完美时空,公会,魔族,游戏,MMOG,RPG,热门,流行,攻城,黄金装备,极品装备,戒指,聊天,PKwww.175zz.com |
|