题目描述
WZH有一个由原石构成的n阶三角形魔法阵,三角形魔法阵如下图:
但是WZH现在想要将这个魔法阵改造成一个n阶五边形魔法阵,五边形魔法阵如下图:
WZH发现并不是每一个n阶三角形魔法阵和n阶五边形魔法阵所用的石头都是一样的,所以WZH想知道将现在的n阶三角形魔法阵改造为n阶五边形魔法阵还需要多少原石?不过他觉得这会是一个天文数字,所以只要告诉他对3733取模后的数字就好了!
如:
117阶的三角形法阵改造成117阶的五边形法阵需要 13572 个原石,
那么只要输出 2373 (13572 MOD 3733)
输入
多组输入数据;每组数据一行,包括一个整数n表示现在是第n阶三角形; 1<=n<=10^8.
输出
每组输入输出一行,包括一个整数m,表示改造成第n阶五边形需要的原石对3733取模后的数.
样例输入
<span style="color:#333333">1
2
117
</span>
样例输出
<span style="color:#333333">0
2
2373
</span>
提示
(a%M + b%M)%M = (a + b)%M
(a%M - b%M+M)%M = (a - b)%M
(a%M * b%M)%M = (a * b)%M
思路:五边形法阵的变化是障眼法,推导公式之后发现相差的数目其实只和三角形石阵有关。
#include<stdio.h>
int sj(int n)///三角形
{
int m;
if(n%2==0)
m=(((1+n)%3733)*((n/2)%3733))%3733;
else
m=((((1+n)/2)%3733)*(n%3733))%3733;
return m;
}
int xc(int n)///相差个数
{
int res;
res=(sj(n)+sj(n-2)-1+3733)%3733;
return res;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n>=1&&n<=100000000)
printf("%d\n",xc(n));
else
printf("error\n");
}
return 0;
}