为什么此代码在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

为什么此代码在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) {

问题,由我自己解决!!!!假设问题是在随机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)
        {
            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;