为什么此代码在Windows 7上与visual studio配合使用,而在linux上却不能正常工作 long long int fun2(int a、int b、int m) { long-long-int-res=1; 长整型c=a%m; 对于(int i=1;i
问题,由我自己解决!!!!假设问题是在随机a中。我交换这个为什么此代码在Windows 7上与visual studio配合使用,而在linux上却不能正常工作 long long int fun2(int a、int b、int m) { long-long-int-res=1; 长整型c=a%m; 对于(int i=1;i,c,int,long-integer,C,Int,Long Integer,问题,由我自己解决!!!!假设问题是在随机a中。我交换这个 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) {
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;
}
用这个
int a = (int)((num - 1) * rand() / (RAND_MAX + 1.0)) + 1;
一切都很完美-用户3144540举个具体的例子会很有帮助-对于一个特定的输入,你期望得到什么与实际结果相比。你说“没有警告”,但您是否尝试在Linux上使用
-Wall
进行编译?具有预期和接收到的输出的输入可能会很好。因为这些函数被称为fun
和fun2
,没有任何文档。一个可能与您的问题无关的旁白:一个测试,例如if(a>INT\u MAX)
其中a
的类型为int
将永远不会为真,因为int
的值不能大于int\u MAX
。我看不到输出上的差异。和。
int a = (int)(rand()%(num-1)) + 1;