数论 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 ...
 
随机推荐
- 基础笔记4(包装类,时间date. calendar
			
1.包装类 基本类型和对象. 编译器会对基本类型和包装类进行自动拆箱,装箱处理 Interger i=5; int i=new Interger(4); 一个缓存问题:以便提高效率 integer ...
 - XMPP学习记录之实战篇
			
在学习iOS以来一直想要研究即时聊天方面的技术,因工作原因此计划一直搁浅,近日偷得时闲开始着手与XMPP的学习.在学习之前我一直认为XMPP对我来说是一个很有难度的挑战,在了解了协议的具体形式后,才发 ...
 - div 一段时间后自动隐藏
			
一.div弹出后自动消失 这里并没有删除 setTimeout(function(){$(".alert").hide();},2000); 直接在js文件中需要的地方添加执行这段 ...
 - UiAutomator环境搭建及详细操作
			
一.环境搭建 1.1 必备条件 JDK SDK(API高于15) Eclipse(安装ADT插件) ANT(用于编译生成的jar) 安装JDK并添加环境变量 1.2 详细步骤 1.安装JDK并添加环境 ...
 - laravel开发微信公众号1 之基本配置
			
需要用到的packagist: https://github.com/overtrue/laravel-wechat ( 目前最优雅的laravel微信sdk) 首先安装 compose ...
 - 【转】Image Cyborg 一键下载存储网页所有图片
			
下午仿照网上例子写了个抓取网页中图片并保存到本地的Python的例子,好奇就google了下是否有类似的在线抓取图片的外挂工具. 接着就找到了Pseric写的这篇文章 - Image Cyborg 一 ...
 - Linux 下安装pip
			
安装pip 使用脚本安装和升级pip 要安装或升级pip,需要下载 get-pip.py. 地址:https://bootstrap.pypa.io/get-pip.py 然后运行以下命令 (需要管理 ...
 - SVN - 忽略已经提交的文件
			
1.在本地删除要忽略的文件 2.与资源库同步,提交删除的文件 3.忽略文件
 - powershell玩转sqlite数据库
			
脚本经常需要处理文本,有时候是行列整齐文本.那么powershell脚本处理行列文本有几种方法呢?一种是excel,另外的一些是?access?sqlite? sqlite是一个很小巧的,很方便嵌入到 ...
 - 1、Android Bitmap详细介绍
			
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...