数论水题1

题目描述
T1

CCC的足球比赛和传统的足球比赛有一点不同, 一次进球当且仅当先后接触到球的4名队员的球衣编号是升序排列的。
球员的球衣编号从过1到99,并且每个人的编号都不同。
给出最后得分球员的球衣编号,请计算出有多少合法的球员组合能够产生这一进球。

因为第四个人定下来了,所以问题实际上是3个人
先将问题简化到2个人。两个人,不妨设\(a < b\) 则a选1,b选n-1,a选2,b选n-2。方案数为

\[\sum_{i=1}^n i \]

问题回到3个人。c选了m,则上式中的n为m-1.
令n = n-3;

\[ans = \sum_{i = 1}^{i <= n} {\sum_{j = 1}^{j <= m < n}} j \]

\[ans = {1/2}*({\sum_{i = 1}^{i <= n} n^2 + \sum_{i = 1}^{i <= n} n}) \]

\[ans = ({n^3+3*n^2+2*n})/6 \]

T2

对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数
性质一:一个反素数的质因子必然是从2开始连续的质数.

性质二:p=2t1*3t2*5t3*7t4.....必然t1>=t2>=t3>=.
一个数约数个数=所有素因子的次数+1的乘积

爆搜就好。

void dfs(int k,ll now,int cnt,int last)
{
	if(k==12)
	{
		if(now>ans&&cnt>num){ans=now;num=cnt;}
		if(now<=ans&&cnt>=num){ans=now;num=cnt;}
		return;
	}
	int t=1;
	for(int i=0;i<=last;i++)
	{
		dfs(k+1,now*t,cnt*(i+1),i);
		t*=p[k];
		if(now*t>n)break;
	}
}

T3
随着世界杯小组赛的结束,法国,阿根廷等世界强队都纷纷被淘汰,让人心痛不已. 于是有人组织了一场搞笑世界杯,将这些被淘汰的强队重新组织起来和世界杯一同比赛.你和你的朋友欣然去购买球票.不过搞笑世界杯的球票出售方式也很特别,它们只准备了两种球票.A 类票------免费球票 B 类票-------双倍价钱球票.购买时由工作人员通过掷硬币决定,投到正面,的买A类票, 反面的买B类票.并且由于是市场经济,主办方不可能倒贴钱,所以他们总是准备了同样多的A类票和B类票.你和你的朋友十分幸运的排到了某场精彩比赛的最后两个位置.

这时工作人员开始通过硬币售票.不过更为幸运的是当工作人员到你们面前时他发现已无需再掷硬币了,因为剩下的这两张票全是免费票。

你和你的朋友在欣喜之余,想计算一下排在队尾的两个人同时拿到一种票的概率是多少(包括同时拿A 类票或B类票) 假设工作人员准备了2n 张球票,其中n 张A类票,n 张B类票,并且排在队伍中的人每人必须且只能买一张球票(不管掷到的是该买A 还是该买B).
解析:
设 X(n, m) 为有 n 张A型票、 m 张B型票时、最后 2 张票同型的概率
当 n + m = 0 或 1 时,不考虑;
当 n + m >= 2 时,X(n, 0) = X(0, m) = 1,因为此时必然只剩两张同型票;
X(1, 1) = 0,因为剩下的两张不可能同型;
对于其它的情况,X(n, m) ,有拿到A型票0.5的可能,和拿到B型票0.5的可能,其情形各自独立;
得递推式:
X(n, m) = 0.5 * X(n - 1, m) + 0.5 * X(n, m - 1)
X(2, 0) = X(3, 0) = ... = X(n, 0) =
X(0, 2) = X(0, 3) = ... = X(0, n) = 1
X(1, 1) = 0

int main()
{
	int n;scanf("%d",&n);n/=2;
	for(int i = 2;i <= n;i++)
		f[i][0] = f[0][i] = 1.0;
	for(int i = 1;i <= n;i++)
		for(int j = 1;j <= n;j++)
			f[i][j] = (f[i-1][j]+f[i][j-1])*0.5;
	printf("%.04lf",f[n][n]);
	
	return 0;
}
posted @ 2017-05-29 13:06  rsqppp  阅读(113)  评论(0)    收藏  举报