2017-06-19 58 views
0

我有一個任務:計算和數據限制

在筆記本電池(非標準grided筆記本數學/數字),大小爲N×M(intergers)畫矩形。多少個不同的矩形可以包含這個矩形?

爲N和M == 10^9(1 000 000 000)

最大值

如果結果> =(10^9 + 7)示出了:結果MOD(10^9 + 7)

實施例: Examples

我知道式:

M *(M + 1)* N *(N + 1)/ 4

,實現在C++這樣的問題:

#include <iostream> 
#include <cmath> 
#include <iomanip> 
int main() 
{ 
    long double n, m; 
    std::cin >> n >> m; 
    long double n1 = (n*(n + 1)/2); 
    long double m1 = (m*(m + 1)/2); 
    long double count = std::fmod((n1 * m1), 1000000007); 
    std::cout << std::fixed << std::setprecision(0) << count; 
    return 0; 
} 

但是,當我寫了測試十億X 10億

我的程序顯示我499881764,當Windows calclulator和other calculator顯示441 = _ =

什麼是錯的我做了?如果有人能夠展示正確解決方案的代碼示例,我將非常感激。

回答

0

您在long double類型中失去了精度:您觀察到的輸出是2的冪的倍數的事實是此效應的試金石。

由於您使用的是Windows,因此我的錢是long double是一個64位IEEE754雙精度浮點型(即與該平臺上的double相同),並且可以提供53位精度。

您可以切換到任意精度庫或谷歌「Schranges算法」,以便爲產品計算模數的巧妙方式。

+0

您可以顯示正確解決方案的代碼示例嗎? – NemoUA

+0

你可以用它顯示這個算法和例子嗎,我很喜歡用C++中的數字。 – NemoUA