这个题目 怎么弄 我的程序出现误差,怎么解决
3 等差对Time Limit:1000MS Memory Limit:65535K
题型: 编程题 语言: 无限制
描述
今天是一个特别的日子,百年一遇的光棍节,2011.11.11,xym收到一个装着礼物的信封,是一位mm的XX书,里面是两个棒棒糖和一封信。
信里是一道智力题:
定义如果<x0,y0>和<x1,y1>满足x0-x1=y0-y1,则称这两个为等差对。
mm的问题是,问在<x,y>(0<=x,y<=n)<0,0>,<0,1>…<1,0>,<1,1>…<2,0>,
<2,1>…<n,0>…<n,1>…这(n+1)^2个有序对中存在多少个等差对?
但是xym因为昨晚听他们班的女生唱歌太晚睡觉了,严重影响状态,现在他只能请求各位scau未来的希望帮助他解决这个问题。
输入格式
第一行输入一个整数T(T<=1000),表示case数。
下面T行有T个case,每个case只有一个整数n(1<=n<=10^9),表示0<=x,y<=n;但是由于测试的时候发现用scanf("%lld",&n)有bug,所以为了修正这个bug,请各位用long long读入的同学在读入前先赋0给变量,
例如 long long n=0; scanf("%lld",&n);
输出格式
每个case输出一行,表示等差对的数量,这个结果可能很大,只需最后结果%20111111即可。
输入样例
2
2
100
输出样例
5
338350
提示
注意不要让数据溢出,及时取模的处理
作者
admin
#include<stdio.h>
int main()
{
int T;
long long n=0;
scanf("%d",&T);
while(T--)
{
scanf("%I64d",&n);
printf("%I64d\n", (long long int)((((n*(n+1))%(6*20111111)*((2*n+1)%(20111111*6))+0.5))/6)%20111111);
}
return 0;
}
当n=333333时 与结果出现误差了