数论 UVA 10780
数论题目。有关内容:整数质因数分解,N的阶乘质因数分解,整除的判断。
这道题的题意是给你两个数n、m,要求你求出n!所能整除的m^k的最大值的k是多少。
由于数据范围:1<m<5000,1<n<10000。通过分析我们可知,当n在100 以上后n!早已超出了int甚至__int64的范围了。即使在int范围内,要算出n!和m^k然后依次遍历,这样会超时。
所以我们可以考虑将如果m能整除n!,那么m^k才会有可能整除n!。如果n!可以整除m,那么将m进行质因数分解后,所得的所有质因子应该在n!中出现,而且同一质因子n!所包含的个数应该
大于等于m中所含的个数,那么推广到m^k能整除n!也是这个道理。这里的关键就是将m和n!进行质因数分解,然后先判断n!中是否含有m中的所有质因数,若不能全部包含就说明m不能整除n!,否则
m可以整除n!。接着进行的操作就是,将 n!中所有的m的质因子的个数与m中的对应的质因子的个数进行相处,所得的商取最小值就是m^k的最大值中k的值。
例如 3!=3*2*1,若用2去整除它,则最大只能去2^1,因为2只含有2这一个质因子,而且3!只含有2^1,所以k最大为1。
#include<stdio.h>
#include<math.h>
#include<string.h>
int prime[10010];
int vis[10010];
void prepare()
{
int i,j;
for(i=2;i<10010;i++)
if(!vis[i])
for(j=i*i;j<10010;j+=i)
vis[j]=1;
}
int sieve(int x)
{
int i,j=0;
for(i=2;i<=x;i++)
{
if(!vis[i])
{
prime[j]=i;
j++;
}
}
return j;
}
int solve(int y,int s)
{
int ans=0,i;
for(i=y;i<=s;i*=y)
ans+=s/i;
return ans;
}
int main()
{
int t,No=0;
scanf("%d",&t);
while(t--)
{
No++;
memset(prime,0,sizeof(prime));
memset(vis,0,sizeof(vis));
int m,n,p,i,j;
int l,num1,num2,num3;
int ans=0xffffff;
scanf("%d%d",&m,&n);
prepare();
p=sieve(m);
l=m;
for(i=0;l>1;i++)
{
num1=0;
while(l%prime[i]==0)//对m进行质因数分解
{
num1++;
l/=prime[i];
}
if(num1)
{
num2=solve(prime[i],n);
num3=num2/num1;
ans=ans>num3?num3:ans;
}
}
if(ans)
{
printf("Case %d:\n",No);
printf("%d\n",ans);
}
else
{
printf("Case %d:\n",No);
printf("Impossible to divide\n");
}
}
return 0;
}
数论 UVA 10780的更多相关文章
- 数论 UVA 10943
这是一道关于组合数和隔板法的数论题目.题目说的是选出k个不同且不大于N的数字进行相加,要求这些数字之和等于N,结果要求输出这样的数有多少组.这里可以将问题利用隔板法来转换,那么题目的叙述可以转换成:这 ...
- 数论 UVA 11889
有关数论的题目,题目大意是给你两个数a和c,c为a和另一个数b的最小公倍数,要求你求出b的最小值.由最大公约数gcd(a,b)和最小公倍数lcm(a,b)之间的关系可知,lcm(a,b)*gcd(a, ...
- UVA 10780 Again Prime No Time.(数学)
给定两个整数m和n,求最大的k使得m^k是n!的约数 对m质因子分解,然后使用勒让德定理求得n!包含的质数p的阶数,min(b[i] / a[i])即为结果k, 若为0无解 #include<c ...
- 数论 UVA 10791
这道题目是关于满足同意最小公倍数的所有数对中两数之和的最小值. 题目大意是给你一个数n,要求你求出在所有以n为最小公倍数的数对中两数之和的最小值. 方法:将n进行质因数分解,再将所有分解出的质因子加起 ...
- UVA 10780 - Again Prime? No Time.
题目链接 思路好想,注意细节.错了很多次. #include <cstdio> #include <cstring> #include <string> #incl ...
- 数论 UVA 11076
这道题目的意思简单易懂说的是给你n个数(可能有重复相同的数字),列出他们所有排列的情况,再逐位相加,求出和,例如:给你1,2,3,则排列的情况为<123>, <132>, &l ...
- 数论 UVA 11752
题目大意是在1~2^64-1的范围内找到所有符合条件的数,条件要求这个数字是两个或两个以上不同数字的幂,例如64=8^2=4^3. 对于这一题,分析是:如果一个满足这个条件的数字一定可以转换成i^k, ...
- 数论 UVA 11388
这道题是关于两个数的最大公约数和最小公倍数的题目.给你两个数字g,l,分别表示最大公约数和最小公倍数.要求你找到两个数a,b,要求这两个数的最大公约数和最小公倍数为所给的两个数.如果存在多组数字符合这 ...
- UVA 10780 Again Prime? No Time. 分解质因子
The problem statement is very easy. Given a number n you have to determine the largest power of m,no ...
随机推荐
- python decorator的理解
一.decorator的作用 装饰器本质上是一个Python函数,可以让其他函数在不做任何代码变动的前提下增加额外功能. 装饰器的返回值也是一个函数对象.python里函数也是对象. 它经常用于有切面 ...
- SVM学习(续)
SVM的文章可以看:http://www.cnblogs.com/charlesblc/p/6193867.html 有写的最好的文章来自:http://www.blogjava.net/zhenan ...
- Delphi IDE 设置
显示编译进度 Tools/Environment Options
- .AndroidRuntimeException: requestFeature() must be called before adding content
有以下几种情况: 1. setContentView(R.layout.activity_list); requestWindowFeature(Window.FEATURE_NO_TITLE); 修 ...
- Karma Police - Radiohead
音乐赏析似乎是一件没有意义的工作,与电影相比音乐更加抽象,不同的人对同一首歌会有完全不同的解读. 但一首歌一旦成为经典,就有解读它的必要,因为它一定诉出了一个群体的某些情绪. Karma police ...
- c.BIO连接器与NIO连接器的对比
前面两节,我们分别看了BIO和NIO的两种模式Tomcat的实现方式. BIO的方式,就是传统的一线程,一请求的模式,也就是说,当同时又1000个请求过来,如果Tomcat设置了最大Accept线程数 ...
- @Scheduled 注解
Spring配置文件xmlns加入 <!---加入:xmlns:task="http://www.springframework.org/schema/task"--> ...
- 制作linux内核安装包
实验基于Centos 6.2 升级linux内核 直接在一个有编译环境的设备上,编译升级内核很简单. make menuconfig 或者 拷贝现有系统的.config文件 修改.config文件 ...
- junit基础篇、中级篇-实例代码
学习文章: http://blog.csdn.net/andycpp/article/details/1327147 http://wenku.baidu.com/link?url=C27gDEj0l ...
- OC语言前期准备
OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应 ...