P1762 偶数

博客探讨了杨辉三角形中奇偶分布的分形特性,并提出利用递归解决这一问题。通过计算总数量并减去奇数的数量来确定偶数个数,同时提到了扩展欧几里德算法和欧拉定理在取模运算中的应用,以及高精度计算在处理此类问题中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://www.luogu.org/problemnew/show/P1762

打出杨辉三角形前若干行的奇偶分布情况,便会发现这是一个分形图形。这样就可以用递归解决问题。具体实现时可以直接计算,也可以先算总个数再减去奇数的数量(比较好算)。用扩展欧几里德或欧拉定理来解决除法取模问题,或是直接用高精计算,最后取模。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
long long n,i,f[200],j,t,s;
long long p=1000003,l,k,pp;
long long aa(long long n)
{
     long long i=2LL,j=1LL,q;
     if (n<=2) return 0;
     while (i*2<=n){i=i*2;j++;}
     return (2*aa(n-i)%p+f[j+1]-2*f[j]%p-((i*2-n)%p)*((i*2-n-1)%p)*l+p*p*p)%p;
}
int main()
{
    cin>>n;f[1]=0;i=2;j=1;
    k=2;l=1;pp=p-2;
    while (pp>0)
    {
          if (pp%2==1) l=l*k%p;
          k=k*k%p;pp=pp/2;
    }   
    while (i<=n)
    {
          j++;s=i%p;t=s*(s-1)%p;
          f[j]=((f[j-1]*3%p)+((i%p)*((i-1)%p)%p)*l)%p;
          i=i*2;
    }
    cout<<aa(n);
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值