C++ 中 pow() 函数的输出没有给出准确的答案[重复]

问题描述 投票:0回答:2

用户将给出一个整数输入。我必须在平方后找到mod。但是当我给出一个大整数时,

pow()
给出了错误的答案。我该如何解决这个问题?

#include<bits/stdc++.h>

using namespace std;

int main()
{
    //ios_base:: sync_with_stdio(false);
    //cin.tie(NULL);
    int t;
    cin >> t;
    for(int i = 0; i < t; i++)
    {
        long long n;
        cin >> n;

        long long sn = 0;
        sn = pow(n, 2);
        long long v = pow(10, 9) + 7;

        cout << sn % v << endl;
    }
}
c++ pow
2个回答
1
投票

正如评论所说,

pow
适用于浮点数。由于您想要对整数进行平方,因此最好使用
sn = n*n
将它们相乘。如果您使用
unsigned long long
,您将能够精确计算平方,但前提是该平方最多为
+18,446,744,073,709,551,615
(请参阅 https://en.m.wikipedia.org/wiki/C_data_types


0
投票

解决这个问题的技巧是提前计算模数。 模块化算术为此提供了一些机会。

对于这个问题请注意

(a * b) % m == (a % m) * (b % m)

此外,1000000007^2 仍然适合 64 位 int,因此结果始终足够小。

因此代码的相关部分如下所示

const int64_t m = 1000000007;
int64_t n;
cin>>n;

n = n % m;
int64_t sn = n * n;
sn = sn % m;

cout << sn << endl;
© www.soinside.com 2019 - 2024. All rights reserved.