回复 楼主 编程,我来啦
这是一个难题,然后被我发现答案了,哈哈
完全参考 http://blog.
我是在ubuntu上测试10位数可以通过,你可以试试
程序代码:
#include<iostream>
unsigned Montgomery(unsigned n,unsigned p,unsigned m)
{ //快速计算(n^p)%m的值
unsigned k = 1;
n %= m;
while(p!=1)
{
if(0!=(p&1))k=(k*n)%m;
n = (n*n)%m;
p >>= 1;
}
return(n*k)%m;
}
bool IsPrime(unsigned n)
{
if ( n < 2 )
{
// 小于2的数即不是合数也不是素数
throw 0;
}
static unsigned aPrimeList[] = {
2, 3, 5, 7, 11, 17, 19, 23, 29, 31, 41,
43, 47, 53, 59, 67, 71, 73, 79, 83, 89, 97
};
const int nListNum = sizeof(aPrimeList) / sizeof(unsigned);
for (int i=0;i<nListNum;++i)
{
// 按照素数表中的数对当前素数进行判断
if (1!=Montgomery(aPrimeList[i],n-1,n)) // 蒙格马利算法
{
return false;
}
}
return true;
}
int main()
{
unsigned num = 1233135267;
std::cout << num;
if(IsPrime(num))
{
std::cout << "是奇数" << std::endl;
}
else
{
std::cout << "不是奇数" << std::endl;
}
return 0;
}
[此贴子已经被作者于2015-12-28 23:53编辑过]