首页 > 其他分享 >P4317 花神的数论题 题解

P4317 花神的数论题 题解

时间:2024-06-21 10:56:35浏览次数:8  
标签:题解 ll 51 len 花神 num P4317 fo mod

话说好久没写题解了

image


P4317 花神的数论题

题链

题意:给你一个不超过 \(10^{15}\) 的数 \(n\),求 \(\prod_{i=1}^n sum_i\),其中 \(sum_i\) 表示 \(i\) 在二进制表示下 \(1\) 的个数。

学了几道题后,本能的设出了 \(f_{i,j}\) 表示 \(i\) 位数中含 \(j\) 个 \(1\) 的数的个数,转移方程为:

\[f_{i,j}=f_{i-1,j}+f_{i-1,j-1} \]

那么之后呢?

如果你仔细研究过上面的转移,你也许会发现,它就相当于组合数 C 的预处理

组合数又有什么特殊性质呢?

别急,我们先用暴力的代码打表找找规律。

得到:

1 1
2 1
3 2
4 1
5 2
6 2
7 3

换一种形式并加以排序,得到:

1
1 2
1 2 2 3
1 2 2 2 3 3 3 4

记录每行每个数的个数,则有:

1
1 1
1 2 1
1 3 3 1

杨辉三角!

现在我们是否能想起来,杨辉三角除去第一列后的数值等于对应的组合数

之后,我们只要求出 \(n\) 在二进制意义下的位数 \(len\) 及每一位 \(i\) 在 \(0\) 和 \(1\) 的状态下的总数 \(num_i\),那么结果显然为 \(\prod_{i=1}^{len} i^{sum_i}\)。

其他的,注意 \(mod\) 和 long long

code:

const int mod=1e7+7;
ll n,cnt,len,ans=1;
ll f[51][51],d[51],num[51];
namespace Wisadel
{
	void Wpre()
	{
		fo(i,0,50) f[i][0]=1;
		fo(i,1,50)
		{
			fo(j,1,i)
				f[i][j]=f[i-1][j]+f[i-1][j-1];
		}
	}
	ll Wqp(ll x,ll y)
	{
		ll res=1;
		while(y)
		{
			if(y&1)
				res=res*x%mod;
			x=x*x%mod;
			y>>=1;
		}
		return res;
	}
	short main()
	{
		Wpre();
		n=qr;
		while(n)
			d[++len]=n&1,n>>=1;
		fu(i,len,1)
			if(d[i])
			{
				fo(j,1,i-1)
					num[cnt+j]+=f[i-1][j];
				++num[++cnt];
			}
		fo(i,1,len)
			ans=ans*Wqp(i,num[i])%mod;
		printf("%lld\n",ans);
		return Ratio;
	}
}
int main(){return Wisadel::main();}

完结撒花~

image

标签:题解,ll,51,len,花神,num,P4317,fo,mod
From: https://www.cnblogs.com/Ratio-Yinyue1007/p/18260108

相关文章

  • 【题解】P6323 | 容斥 分拆数
    本题存在低于\(O(nc)\)的做法。逆序对是大小关系,我们在小的那个数处统计每对逆序对,考虑从大到小插入每一个数,这样所有数都比他大,这样它插入在第\(i\)个就会产生\(i\)个逆序对,假设现在有\(x\)个数则它可以产生\([0,x]\)中个逆序对,且每种都恰好有一种插法。那么我们现在......
  • 题解:P10639 BZOJ4695 最佳女选手
    区间最值操作基础题,但是有点码农。依然考虑势能线段树,维护区间和\(\textrm{sum}\)、最大值\(\textrm{M1}\)、次大值\(\textrm{M2}\)、最大值个数\(\textrm{Mcnt}\)、最小值\(\textrm{m1}\)、次小值\(\textrm{m2}\)、最小值个数\(\textrm{mcnt}\),另外需要区间加标记\(\tex......
  • 【题解】CF1949B | 二分答案 霍尔定理
    本题可以做到低于\(O(n^2)\)。最大化最小值,考虑二分答案\(v\)变为检查可行性:每个主菜匹配的开胃菜的两个值都要在\((-\infty,x-v],[x+v,+\infty]\)间选取,问是否存在主菜与开胃菜的完美匹配。对开胃菜排序,得到第\(i\)个主菜可以匹配到的开胃菜集合为一个后缀和一个前缀:\([......
  • 题解:CF1829H Don't Blame Me
    动态规划好题。对于此题解,不懂的问题可以私信笔者。前置知识解题方法用\(dp_{i,j}\)表示前\(i\)个数选择了若干个数按位与之后为\(j\)的子序列个数。接下来思考转移。想到这里,你会发现按位与没有逆运算,一次我们要正推,例如\(f_{i+2}=f_{i}+f_{i+1}\)。那么转移方程不......
  • [题解]P3391 文艺平衡树 - Splay解法
    P3391【模板】文艺平衡树给定序列\(1,2,\dots,n\),接下来\(m\)次操作,每次操作给定\(l,r\),你需要翻转\([l,r]\)。所有操作结束后,请输出这个序列。我们先从“普通平衡树”这一题出发,思考一下Splay操作的本质。我们把一个节点Splay到根节点后,中序遍历在自己前面的节点都在左边,中......
  • CF484E 题解
    很好的数据结构题,加深了蒟蒻对于可持久化线段树的理解。题意给定一个序列\(\{a_n\}\)(\(1\len\le10^5,1\lea_i\le10^9\)),有\(m\)($\lem\le10^5$)个询问,每次询问给出\(l,r,k\),表示询问区间\([l,r]\)里长度为\(k\)的子区间的最小值最大是多少。题......
  • CF166D 题解
    看到其它题解代码颇长,蒟蒻在此贡献一个二分图最大匹配的解法。题意鞋店里有\(n\)(\(1\len\le10^5\))双鞋子,第\(i\)双鞋子有价格\(c_i\)与尺码\(s_i\)(\(1\lec_i,s_i\le10^9\)),保证\(s_i\)互不相同。有\(m\)(\(1\lem\le10^5\))位顾客光临,第\(......
  • SOLIDWORKS常见使用问题解决方案 慧德敏学
    本文Solidkits为大家分享SOLIDWORKS常见使用问题解决方案,让我们一起学习,使设计工作效率更高。1、如何隐藏装配体里头的零件?—右键点击零件或者树状图中的零件名字,然后点眼睛那个图标。更快捷的方式,只需要把鼠标放到那个零件上,按一下Tab,隐藏了。2、如何恢复隐藏装配体里头的零......
  • CF988D Points and Powers of Two 题解
    题目传送门题目大意题目描述在坐标线上有nnn个不同的点,第iii......
  • CF212D 题解
    根据此题首次学到二阶差分Trick,好题。题意给出一个序列\(\{a_n\}\),满足\(n\le10^6,1\lea_i\le10^9\),定义函数\(f(i,k)\)为:\[f(i,k)=\min\limits_{j=i}^{i+k-1}a_j\]你需要回答\(m\)个询问,每次询问给出一个整数\(k\)(\(1\lek\len\)),求所有\(f(i,k......