我曾经认为i <= N
和i < N+1
没有区别
但是当我在程序中输入6 6
时,
如果i <= N
则打印:
1 6 6
6 1 1
2 3 3
3 2 2
否则打印:
1 6 6
6 1 1
2 3 3
3 2 2
3 2 2
2 3 3
我弄不清楚为什么会有这样的差别
#include <iostream>
#include <cmath>
using namespace std;
typedef long long LNT;
LNT gcd(LNT a, LNT b)
{
if( b == 0)
return a;
return gcd(b, a%b);
}
int main()
{
LNT red, green;
LNT GCD;
cin >> red >> green;
GCD = gcd(red, green);
//for(LNT i = 1; i<sqrtl(GCD)+1; i++)
for(LNT i = 1; i<=sqrtl(GCD); i++) // <- This Line cause the difference
{
if( GCD % i == 0)
{
cout << i << " " << red/i << " " << green/i <<endl;
if( i != GCD/i )
{
LNT k = GCD/i;
cout << k << " " << red/k << " " << green/k <<endl;
}
}
}
}
N == MAX_INT_VALUE
,那么N+1
就会溢出并且它们是不同的。 - csharpfolkINT_MAX
,在C++中,这将是std::numeric_limits<int>::max()
。溢出会使INT_MAX+1
未定义,因此您无法再对其进行推理,但是假设N
是int的话,N <= INT_MAX
也相当无意义。 - MSalters