用户将给出一个整数输入。我必须在平方后找到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;
}
}
正如评论所说,
pow
适用于浮点数。由于您想要对整数进行平方,因此最好使用 sn = n*n
将它们相乘。如果您使用 unsigned long long
,您将能够精确计算平方,但前提是该平方最多为 +18,446,744,073,709,551,615
(请参阅 https://en.m.wikipedia.org/wiki/C_data_types)
解决这个问题的技巧是提前计算模数。 模块化算术为此提供了一些机会。
对于这个问题请注意
(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;