第一次发贴,格式不对请多多原谅。
想请教各位大牛,我是编程初学者。碰到这个题目,在数字较小时,我的程序是写对的,但是它这个大数字,取模操作,该程序又应该怎么写呢?谢谢!
下面是题目下方:
==============================================================
网格(grid)
【问题描述】
有一个 n*m 的网格,你需要求出网格中有多少个正方形和多少个长方形(不包括正方形)。例如:当 n=2,m=3 时,网格形如下图:
其中,1*1 的正方形共有 6 个,2*2 的正方形共有 2 个,所以正方形有 8 个。1*2的长方形有 7 个,1*3 的长方形有 2 个,2*3 的长方形有 1 个,所以长方形有 10 个。
由于答案可能会超出 64 位整数范围,你需要输出答案对 1000000007(10^9+7) 取模
的结果。
【输入格式】
一行两个整数 n 和 m。
【输出格式】
一行两个整数,分别表示正方形的数量与长方形的数量对 1000000007 取模的结果。
【输入输出样例】
样例输入1
2 3
样例输出 1
8 10
样例输入2
100 75
样例输出 2
214700 14177800
样例输入3
114514 1919810
样例输出 3
952234331 997363822
【数据范围】
对于 20%的数据,n,m<=3;
对于 40%的数据,n,m<=100;
对于 60%的数据,n,m<=5000;
对于 80%的数据,n,m<=100000;
对于所有数据,1<=n,m<=10^9。
注意:
答案需要对 1000000007 取模,并且模意义下不能直接进行除法运算,例如1000000008 除以 2 的结果是 500000004,1000000008 对 1000000007 取模的结果为 1,将 1 直接除以 2 并不能得到 500000004。
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,目前超出我们的服务范围,暂时无法为您解答。
首次提问人员可免费体验一次有问必答服务。目前首次提问的问题服务范围为:编程语言、Java开发、python、数据库、前端开发 领域专业技术问题,为您提供问题的解决思路和指导。不提供源码代写、项目文档代写、论文代写、安装包资源发送或安装、软件使用指导等服务。
我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int n,m;
unsigned long long zfx=0,sum1=0,sum2=0; //zfx正方形;
cin>>n>>m;
if(n>m) swap(n,m);
for(int i=1;i<=n;i++)
zfx+=(n-i+1)*(m-i+1);
zfx%=1000000007;
cout<<zfx<<" ";
for(int i=1;i<=n;i++)
sum1+=i;
for(int i=1;i<=m;i++)
sum2+=i;
cout<<(sum1*sum2)%1000000007-zfx;
return 0;
}
请问你自己有多少思路呢? 请把思路写出来。 取模就按照正常方式即可。