hdu 3758 Factorial Simplification
这题主要是质因数分解!!
求出每个因子的幂,如果有负数,则输出-1;
如果2的幂数为0,这输出0;
最后就是开始凑阶乘了……
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<string>
#include<cstdlib>
#include<vector>
using namespace std;
int prime[],cnt,p[],q[],num[],len;
int s[],r[],a[];
bool f[];
int min(int a,int b)
{
return a>b?b:a;
}
int max(int a,int b)
{
return a>b?a:b;
}
void init()
{
int i,j;
cnt=;
for(i=;i<=;i++)
{
if(f[i]==) prime[cnt++]=i;
for(j=;j<cnt&&prime[j]*i<=;j++)
{
f[i*prime[j]]=;
if(i%prime[j]==) break;
}
}
}
int count(int n,int p)//计算n!中p因子的个数
{
int sum=;
while(n>=p)
{
sum+=(n/=p);
}
return sum;
}
int divs(int n,int m)//分解因子
{
int i,j;
len=;
memset(num,,sizeof(num));
for(i=;i<n;i++)
{
for(j=;prime[j]<=p[i];j++)
num[j]+=count(p[i],prime[j]);
len=max(len,j);
}
for(i=;i<m;i++)
{
for(j=;prime[j]<=q[i];j++)
{
if(j>=len) return -;
num[j]-=count(q[i],prime[j]);
if(num[j]<) return -;
}
}
if(num[]==) return ;
return ;
}
int main()
{
init();
int i,j,k,ans,n,m,temp,t,cur,mul;
bool flag;
cin>>t;
while(t--)
{
cin>>n>>m;
for(i=;i<n;i++) cin>>p[i];
for(i=;i<m;i++) cin>>q[i];
ans=divs(n,m);
if(ans<=)
{
cout<<ans<<endl;
continue;
}
for(i=;i<len&&num[i]>;i++) ;
len=min(len,i);
cur=prime[i]-;
cnt=;
while(num[]>&&cur>=)
{
flag=true;
a[]=count(cur,prime[]);
if(a[]>num[]) flag=false;
else mul=num[]/a[];
for(i=;flag&&i<len&&prime[i]<=cur;i++)
{
a[i]=count(cur,prime[i]);
if(a[i]>num[i]) flag=false;
else mul=min(mul,num[i]/a[i]);
}
if(flag && mul>)
{
if(i<len) len=i;
r[cnt]=cur;
s[cnt++]=mul;
for(i=;i<len;i++)
{
num[i]-=(mul*a[i]);
if(num[i]==) break;
}
if(len>i) len=i,cur=prime[len]-;
else cur--;
}
else cur--;
}
cout<<cnt<<endl;
for(i=;i<cnt;i++)
cout<<r[i]<<' '<<s[i]<<endl;
}
return ;
}
hdu 3758 Factorial Simplification的更多相关文章
- 题解报告:hdu 1124 Factorial(求N!尾数有多少个0。)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1124 Problem Description The most important part of a ...
- HDU 1124 Factorial (数论)
http://acm.hdu.edu.cn/showproblem.php? pid=1124 題目好長好長,好可怕,看完腎都萎了,以後肯定活不長.我可不能死在這種小事上,小灰灰我勵志死在少女的超短裙 ...
- hdu 1124 Factorial(数论)
题意: 求n!的尾0的个数 分析: 0一定是由因子2和5相乘产生的: 2的个数显然大于5的个数,故只需统计因子5的个数 n/5不能完全表示n!中5的个数(egg: 25),应该n/=5后,累加上n/2 ...
- HDU 1124 Factorial (阶乘后缀0)
题意: 给一个数n,返回其阶乘结果后缀有几个0. 思路: 首先将n个十进制数进行质因数分解,观察的得到只有2*5才会出现10.那么n!应含有min(2个数,5个数)个后缀0,明显5的个数必定比2少,所 ...
- [SinGuLaRiTy] 组合数学题目复习
[SinGuLaRiTy] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [CQBZOJ 2011] 计算系数 题目描述 给定一个多项式( ...
- ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbilisi, November 24, 2010
ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbil ...
- Factorial(hdu 1124)
Description The most important part of a GSM network is so called Base Transceiver Station (BTS). Th ...
- HDU——PKU题目分类
HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...
- leetcode N-Queens/N-Queens II, backtracking, hdu 2553 count N-Queens, dfs 分类: leetcode hdoj 2015-07-09 02:07 102人阅读 评论(0) 收藏
for the backtracking part, thanks to the video of stanford cs106b lecture 10 by Julie Zelenski for t ...
随机推荐
- ProgressIndicator显示进度条以及一些文字信息
//ProgressIndicator可以显示进度条以及一些文字信息,不过这个属性一般都在cs文件中操作. private void PhoneApplicationPage_Loaded(objec ...
- Ubuntu下MySQL忘记root密码重置
MySQL忘记root密码肿么办?-_-||| 这种情况虽然不是很常见,但是有时长时间没有登录系统,还真会忘记密码.这时候,如果您能以系统管理员权限登陆密码,那还是有救的.放大招,将其重置即可. ...
- 用canvas 绘制的饼状统计图、柱状统计图、折线统计图
canvas 绘制的饼状统计图 canvas 绘制的柱状统计图 canvas 绘制的折线统计图
- jsp探针
在网上找到一些jsp探针,收藏下. JSP探针1.jsp <%@ page contentType="text/html;charset=gb2312" %> < ...
- 基础学习总结(八)--Intent中显示意图和隐式意图的用法
Intent(意图)主要是解决Android应用的各项组件之间的通讯.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组 ...
- svn迁移
一. VisualSVN服务器迁移 场景:把A服务器备份到B服务器 方法: 1.拷贝A上Repositories文件夹到B上 2.打开B上VisualSVN Server Manager ...
- mac OS X下安装Redis及Thinkphp3.1使用Redis
一.安装Redis 1.安装Homebrew 在终端输入ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/install/maste ...
- JAVA四种线程池实例
1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? Java 1 2 3 4 5 6 7 new Thread(new Runnable() { ...
- 使用Sass优雅并高效的实现CSS中的垂直水平居中(附带Flex布局,CSS3+SASS完美版)
实现css水平垂直居中的方法有很多,在这里我简单的说下四种比较常用的方法: 1.使用CSS3中的Flex布局 对于flex,我们要了解的是它是一个display的属性,而且必须要给他的父元素设置fle ...
- yabeblog.me 关于Tomcat7部署 一台机器部署两个项目,一个用域名访问,一个用IP访问
该内容来自 http://www.yabeBlog.me,转载请说明出处. 1.使用IP访问的项目放在Tomcat7 的webapps目录下面:比如:AAA 2.使用域名访问的项目放在Tomcat7的 ...