y=x^2,y=0,x=600という三つの線で囲まれる領域の面積を求める。ただし、積分ではなく、次の近似を使って値を求めることとする。
一定間隔dで区切り、高さは左端のy=x^2で求めた値とする。これを、x=600まで行う。また、dは600に約数。
縦の長さがf(d)で横の長さがdの長方形の面積
+縦の長さがf(2d)で横の長さがdの長方形の面積
+縦の長さがf(3d)で横の長さがdの長方形の面積
+...
+縦の長さがf(600-d)で横の長さがdの長方形の面積
図がプロコンの所のPDFに載っています。
d(整数)
近似的な面積(整数)
20
68440000
for文で回すまたは、式変形より次の式を導き出します。
e = 600/d - 1
d*d*d * e*(e + 1)*(2*e + 1)/6
for文法
#include <stdio.h> int main(){ int i,d,s; scanf("%d",&d); s=0; for(i=0;i<600;i+=d){ s+= i*i*d; } printf("%d",s); return 0; }
式展開
#include <stdio.h> int main(){ int i,d,s,e; scanf("%d",&d); e=600/d-1; s = d * d * d * e*(e+1)*(2*e+1)/6; printf("%d",s); return 0; }
手動での式展開に時間がかかるようであれば、for文で十分だと思います。ただし、後々のことを考えると展開の方が時間的に有利かも。その前にintの限界が来て多倍長計算しなければいけなくなるでしょうけど。