标签:
忽略如此玛丽苏的题目,这其实是一道数论题,40%的福利(素数)。
自己拿张纸画一下,很快就能找出规律。
program aa;
const a=1000000007;
var n,m,s,i:longint;
sum:int64;
function pd(n:longint):boolean;
var i:longint;
begin
pd:=true;
for i:=2 to trunc(sqrt(n)) do
if (n mod i)=0 then
begin
pd:=false;
break;
end;
end;
function qiu(x,y:longint):int64;
begin
qiu:=((n+1-x)*(m+1-y)*4)mod a+((n+1-y)*(m+1-x)*4)mod a;//这就是朕找的公式。
qiu:=qiu mod a;
if x=y then qiu:=qiu div 2;
end;
begin
readln(n,m,s);
if pd(s)=true then
begin
sum:=(((n+1-s)*m*4)mod a +((m+1-s)*n*4)mod a)mod a;//这是素数的部分,其实直接求也行。
if s=1 then sum:=sum div 2;
writeln(sum);
halt;
end;
for i:=1 to trunc(sqrt(n)) do
if (n mod i)=0 then
begin
sum:=(sum+qiu(i,(n div i)))mod a;
end;
writeln(sum);
end.
标签:
原文地址:http://www.cnblogs.com/liuxinyu/p/4886453.html