0
long long int fun2(int a, int b, int m)
{
long long int res = 1;
long long int c = a % m;
for (int i = 1; i <= b; i <<= 1)
{
c = c % m;
if ((b & i) != 0)
{
res = res * c;
res = res % m;
}
c = c * c;
}
return res;
}
int fun(int num, int k)
{
srand((unsigned)time(NULL));
if (num <= 1)
{
return num * 10;
}
if (num == 2 || num == 3 || num == 5)
{
return num * 10 + 1;
}
if (num % 2 == 0)
{
return num * 10;
}
if (num % 3 == 0)
{
return num * 10;
}
if(num % 5 == 0)
{
return num * 10;
}
int s = 0;
int s_pow = 1;
while ((s_pow & (num - 1)) == 0)
{
s = s + 1;
s_pow = s_pow << 1;
}
int d = num/s_pow;
for (int i = 0; i < k; i++)
{
int a = (int)((num - 1) * rand()/(RAND_MAX + 1.0)) + 1;
if (fun2(a, d, num) != 1)
{
is_prime = false;
for (int r = 0; r <= s - 1; r++)
{
if (fun2(a, (1 << r) * d, num) == num - 1)
{
is_prime = true;
break;
}
}
if (!is_prime)
{
return num * 10;
}
}
}
return num * 10 + 1;
}
問題出在哪裏,也許這些long long int與int比較不能正常工作。 編譯窗口和linus沒有任何警告。它的工作原理,但給Linux不好的結果,因爲Windows是好的。請幫忙。爲什麼這段代碼可以在Windows 7上使用visual studio並且不能正常工作對於linux
@EDIT 我刪除代碼INT_MIN和INT_MAX我只是試圖與此問題解決了。 (對不起,應該刪除)
這將會是有益的給一個具體的例子 - 一個特定的輸入,你能指望得到vs什麼是實際結果。 – ysap
你說「沒有警告」,但你是否嘗試在Linux上用'-Wall'編譯? – JAB
Linux和Windows有各類不同的定義......看到http://stackoverflow.com/questions/15908789/cross-platform-definition-of-64-bit-integers-in-c-for-windows-and-linux – cubitouch