`

【素数筛法小结】fzu 1607 + fzu 1753

阅读更多
KIDx 的解题报告
http://acm.fzu.edu.cn/problem.php?pid=1607
题意:求n平均分成m份(m>1),问有多少种分法,以及平均的分量最多可以达到多少?

多少种分法:
求n的因子的组合数即可,由于m>1所以【所有因子取0个的情况不包括】
例如:n中有3个素因子p1,2个素因子p2,p1可以取0个,1个,2个,3个【4种情况】,p2可以取0个,1个,2个【3种情况】,所以分法 = 4*3-1 = 11

平均达到最大值:
n/(n的最小素因子)

#include <iostream>
using namespace std;
#define M 1000005

int pf[M];		//pf[i]储存i的最大素因子
bool hash[M];

int main()
{
	int i, j, n, k = 0, a, b, tp, q;
	bool flag;
	/******************素数筛法******************/
	for (i = 2; i < M; i++)
	{
		if (!hash[i])
		{
			pf[i] = i;
			for (j = i << 1; j < M; j += i)
				if (!hash[j])
					hash[j] = true, pf[j] = i;
		}
	}
	/******************素数筛法******************/
	while (~scanf ("%d", &n))
	{
		flag = false;
		a = b = 1;
		while (n > 1)			//将n进行素数分解
		{
			tp = 1;
			q = pf[n];			//获取n的最大因子
			while (n % q == 0)	//求有多少个q因子
			{
				n /= q;
				if (n > b)		//b是拿到的最多的分量
					b = n;
				tp++;
			}
			a *= tp;			//简单组合数学
		}
		printf ("%d %d\n", a-1, b);
	}
    return 0;
}


http://acm.fzu.edu.cn/problem.php?pid=1753
题意:求多个组合数的最大公约数
思路:求各组组合数的各个素因子个数,以少为主,因为要的是公约数嘛,最后乘起来即可


求N!里包含某素数因子p的个数,就可以这样求。
while(n>0)
{
    x+=n/p;
    n/=p;
}
不理解请看:求N!的素因子个数的一个例子:
http://972169909-qq-com.iteye.com/blog/1126188

另外推荐这题:http://poj.org/problem?id=2992
需要预处理求n!的各个素因子个数,因为n比较小,可以开数组预处理存放后再用


#include <iostream>
using namespace std;
#define LL __int64
#define inf 0x3fffffff
#define M 100005
int p[10005], num[M], ni[155], mi[155];    //num[i]表示所求中有多少个i因子
bool flag;
int main()
{
	LL ans;
	memset (num, 0, sizeof(num));
	int i, j, k = 0, t, n, m, tp, count, mins;
	/***********素数筛法***********/
/**********M以内的素数存到p数组**********/
	for (i = 2; i < M; i++)
	{
		if (!num[i])
		{
			p[k++] = i;
			for (j = i << 1; j < M; j+=i)
				if (!num[j])
					num[j] = 1;
		}
	}
/**********M以内的素数存到p数组**********/
	/***********素数筛法***********/
	while (~scanf ("%d", &t))
	{
		memset (num, -1, sizeof(num));
		mins = inf;
		for (i = 0; i < t; i++)
		{
			scanf ("%d%d", ni+i, mi+i);
			if (mins > ni[i])		//这个是必须的,自己想!
				mins = ni[i];
		}
		for (j = 0; j < t; j++)
		{
			n = ni[j];
			m = mi[j];
			for (i = 0; i < k; i++)
			{
				if (p[i] > mins)	//必须的!
					break;
				count = 0;
				/*****n!中有多少个p[i]*****/
				if (n >= p[i])
				{
					tp = n;
					while (tp)
					{
						tp /= p[i];
						count += tp;
					}
				}
				/*****m!中有多少个p[i]*****/
				if (m >= p[i])
				{
					tp = m;
					while (tp)
					{
						tp /= p[i];
						count -= tp;	//因为是分母,所以减
					}
				}
				/*****(n-m)!中有多少个p[i]*****/
				if (n - m >= p[i])
				{
					tp = n - m;
					while (tp)
					{
						tp /= p[i];
						count -= tp;
					}
				}
				/****得到的count就是该组合数中有多少个p[i]****/
				if (num[p[i]] == -1 || count < num[p[i]])
					num[p[i]] = count;
			}
		}
		ans = 1;
		for (i = 0; i < k; i++)
		{
			if (num[p[i]] <= 0)
				continue;
			for (j = 0; j < num[p[i]]; j++)
				ans *= p[i];
		}
		printf ("%I64d\n", ans);
	}
	return 0;
}
  • 大小: 8.4 KB
1
3
分享到:
评论

相关推荐

    fzu online judge

    【fzu在线评测系统】是面向编程爱好者和学习者的一个平台,主要功能是提供各种算法题目供用户在线解答,以提升编程能力和算法思维。在这个压缩包文件中,包含的是一些关于fzu在线评测系统的解题记录,虽然题目难度...

    fzu 1698解题报告

    求最大乘积 的源代码 次题是fzu 4月月赛题 是一道数学题啊

    福大fzu OJ题目

    不要下载此版的,请下载最新的http://download.csdn.net/source/1664620 离线版的福大acm在线评测OJ系统题目 更新到2009年8月 (注:chm电子书格式化)

    2021FZU计算机视觉期末复习

    计算机视觉是研究如何让计算机理解和解释视觉信息,使之能够复制人类对视觉信息的处理、分析和理解能力,并做出相应的行为决策。它涉及图像采集、处理、分析和理解等多个方面,广泛应用于工业自动化、监控系统、医疗...

    2021FZU计算机视觉作业(八)

    在计算机视觉领域中,灰度共生矩阵(GLCM)是一种用于纹理特征分析的技术。它通过计算图像中像素值的相对位置和分布来揭示图像的纹理特性,这些特性在图像分割、特征提取和图像分析等领域中非常有用。...

    fzu大数据基础实验4

    fzu大数据基础实验4

    2011 ACM 多校联合 2011 MU11 13 FZU

    【标题】"2011 ACM 多校联合 2011 MU11 13 FZU" 指的是一项编程竞赛,ACM(国际计算机学会)每年都会举办多场这样的竞赛,旨在提升学生的算法设计和编程能力。ACM竞赛通常包括一系列的编程题目,参赛队伍需要在限定...

    FZU飞跃手册 相关文件 (FZU Flying Book Relevant documents)

    这是关于我们飞跃手册项目的相关文档,包括成员分组信息表格,各组成员任务概要文档,项目日记等文档。 (This is a collection of documents relating to our Leapfrog Handbook project, including member ...

    ACM数学_FZU绝密资料

    根据给定的文件标题“ACM数学_FZU绝密资料”及描述“ACM数学_FZU...............绝密..........”,我们可以看出这份资料主要聚焦于数学在ACM竞赛中的应用,尤其是在解决算法问题时数学理论的重要性。下面我们将从...

    FZU软件工程操作系统课程复习资料-整理

    FZU软件工程操作系统课程复习资料-整理 本资源摘要信息是关于FZU软件工程操作系统课程复习资料的整理,涵盖操作系统的基本概念、进程和线程、存储管理和文件系统等方面的知识点。 一、操作系统的定义和主要功能 ...

    FZU软件工程web课程复习资料-整理

    "FZU软件工程web课程复习资料-整理" 本资源是FZU软件工程web课程的复习资料,涵盖了web开发的基础知识和技术。下面是对该资源中所涉及的知识点的详细解释: 第一讲 web 开发概述 1. 因特网与万维网 因特网是一种...

    C#作业(FZU)miniword完整版

    【C# miniword 完整版】是一款基于C#编程语言开发的小型文字处理软件,类似于微软的Word,主要用于FZU(福州大学)的教学与作业。该项目旨在让学生熟悉C#编程环境,掌握Windows Forms应用程序的开发技术,以及对文本...

    ACM半数集(FZU ACM上的半数集问题)

    FZU ACM 上的半数集问题 的源代码

    FZU2021计算机视觉慕课答案(一)

    FZU2021计算机视觉慕课是一门面向学生和研究人员的基础课程,其中包含了丰富的实践案例和练习题。从提供的文件内容中,我们可以提取一些计算机视觉中的基础知识点,包括图像的读取、显示、转换、保存、以及图像处理...

    fzu—java张苏老师课件

    《fzu—java张苏老师课件》是一个针对Java初学者的课程资料集合,由一系列PPT文件组成,包括了从基础到进阶的多个章节。这个资源旨在帮助初学者系统地学习Java编程语言,逐步掌握其核心概念和技术。下面我们将详细...

    fzu 1812 coin 背包

    1812 coin 解题代码 多重背包的应用

    2021FZU计算机视觉答案(五)

    标题“2021FZU计算机视觉答案(五)”表明本文档是一份关于计算机视觉题目的解答集,特别是涉及到与图像处理和分析相关的内容。从给出的部分内容来看,文档包含实现特定图像处理任务的Python代码示例,具体涉及到...

    FZU2021计算机视觉答案(四)

    FZU2021计算机视觉答案(四)中包含了肤色检测的实验过程和代码实现,以下是从该文件中提取出来的知识点: 1. **肤色检测的基本原理**: 肤色检测通常基于色彩空间中的色度或亮度属性,例如,在RGB色彩空间中,...

    FZU编译原理实践作业一参考代码

    仅作参考,抄被发现后果自负哈。

Global site tag (gtag.js) - Google Analytics