将大数量增加到大功率并大量修改它?

时间:2014-11-26 16:03:20

标签: c bignum

我被困在一个简单的问题上。 我得到3个大数(A,B,C),所有整数,我需要执行以下操作:从A到B并用C对结果进行模数,然后检查结果是否等于1.这是我的代码:< / p>

double power = fmod((pow((double)A,(double)B)),(double)C);
    if (power != 1){
        printf("Something!\n");
    }

并且它不起作用(我试过小数字,比如17由28驱动并由29模块化)。有什么建议吗?

3 个答案:

答案 0 :(得分:0)

试试这个(为了避免算术溢出):

unsigned long long power = 1;
A %= C;
while (B > 0)
{
    power = (power * A) % C;
    B--;
}

您可以使用以下方法进一步提高运行时性能:

unsigned long long power = 1;
A %= C;
while (B > 0)
{
    if (B & 1)
        power = (power * A) % C;
    B >>= 1;
    A = (A * A) % C;
}

答案 1 :(得分:-1)

尝试这种方法

double a,b,c;

a = 1124124124254234;
b = 1124124124254234 * 5;
c = 1124124124254234 * 2;

double power = pow(a,b); 

double mod = fmod(power, c);

if (mod != 1){
    printf("Something!\n");
}

答案 2 :(得分:-1)

Double的最小和最大尺寸分别为-1.7 * 10 ^ 308和1.7 * 10 ^ 308。如果你需要更大,你可以尝试很长时间。

不确定为什么要使用fmod。但这应该做你想要的。

double power = ( pow(A, B) ) % C;
if (power != 1){
        printf("Something!\n");
    }