P1762 偶数&杨辉三角

P1762 偶数&杨辉三角(天立OI)

解题思路

一.结论法

杨辉三角形结论

  1. n行有n个数。

  2. 每行奇数个数必为2kk不是行数)

  3. 当行数恰为2k时,奇数个数为2k个,无偶数。

  4. 当行数恰为2k时,其前2k行有3(k1)个奇数。

  5. n行奇数个数(p):

    n=2k1×2k2×2k3....×2knp=1×3kn+2×3kn1+22×3kn2+....+2n1×2k1

  6. n行偶数个数(n1)×n/2p

二.分析法

既然看不出来,那就打表(mod2):

1  1
2  1 1
3  1 0 1
4  1 1 1 1
5  1 0 0 0 1
6  1 1 0 0 1 1
7  1 0 1 0 1 0 1
8  1 1 1 1 1 1 1 1           *****
9  1 0 0 0 0 0 0 0 1
10 1 1 0 0 0 0 0 0 1 1
11 1 0 1 0 0 0 0 0 1 0 1
12 1 1 1 1 0 0 0 0 1 1 1 1   *****
13 1 0 0 0 1 0 0 0 1 0 0 0 1
14 1 1 0 0 1 1 0 0 1 1 0 0 1 1
15 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

这个就有规律了:

  1. n=2k时,前面一共有3k1

  2. n!=2k时,可以将n拆成n=2k1×2k2×2k3....×2kn

    但这个又有什么用呢?不妨举个例子:

    n=12=23+22npp=33+232

可以发现方法一里面的规律:

综上,下次遇见关于杨辉三角的题先打表!!

CODE

#include<bits/stdc++.h>
#define ll __int128
using namespace std;
const ll maxn = 300;
ll int_maxn=1e9;
ll ll_maxn=1e18;
inline ll read_int(){
    ll a=0,f=0,g=getchar();
    while(g<'0'||g>'9'){if(g=='-') f=1;g=getchar();}
    while('0'<=g&&g<='9') a=a*10+g-'0',g=getchar();
    return f ? -a : a;
}
inline void write(ll s,bool f){
    ll top=0,a[40];
    if(s<0) s=-s,putchar('-');
    while(s) a[++top]=s%10,s/=10;
    if(top==0) a[++top]=0;
    while(top) putchar(a[top]+'0'),top--;
    if(f) putchar('\n');
}
ll n;

ll top=0,jz[10000],mod=1000003;
inline void er(){
	ll m=n;
	for(ll i=0;m;i++){
		if(m&1) jz[++top]=i;
		m>>=1;
	}
}

inline ll qpow(ll n,ll c){
	ll ans=1;
	while(c){
		if(c&1) ans=ans*n%mod;
		n=n*n%mod,c>>=1;
	}
	return ans;
}

inline void read(){
	n=read_int();
	er();
	ll a=1;
	ll ans=0;
	for(ll i=top;i>=1;i--){
		ans=ans+a*qpow(3,jz[i])%mod;
		a=a*2%mod;
		ans%=mod;
	}
	ll L=(n+1)%2 ? n/2%mod*(n+1)%mod : (n+1)/2%mod*(n)%mod;
	ans=L-ans;
	write(ans<0 ? ans+mod : ans,1);
}

int main (){
	read();
}

THE END

posted @   轩Demonmaster  阅读(232)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示