hnustOJ - 1693: 原石法阵

题目描述

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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值