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 ...
随机推荐
- NDK 通过java调用so文件
首先我们来看so文件的来源 1. 自己写.c文件,然后生成so库 2. 引用别人的静态库,或者动态库来生成新的jni调用库. 我们先来看最简单的编写一个jni调用的so库,包含一个获取字符串的方法,通 ...
- 【风马一族_Android】Android Studio 给APP设置签名
在Android Studio中,给App签名,如果没有给App设置签名的话,Android Studio会主动给app设置一个默认的签名 接下来,介绍主动给App设置一个签名的整个步骤过程: 1) ...
- Css background缩写
例子: background:url(../images20130624/bg.png) no-repeat -1424px -5px; 官方API Value: ['background-color ...
- activiti源码分析(一)设计模式
对activiti有基本了解的朋友都知道,activiti暴露了七个接口来提供工作流的相关服务,这些接口具体是如何实现的呢?查看源码发现其实现的形式大体如下: public class Runtime ...
- 11.find 查找并复制文件
请把系统上拥有者为ira用户的所有文件,并将其拷贝到/root/findfiles目录中 find /home/ira/ -user ira -exec cp -a {} /root/findfile ...
- c#键盘鼠标钩子
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- Enhanced RCP: How views can communicate – The e4 way | Tomsondev Blog
Some weeks ago I published how views can communicate using the EventAdmin-Service. To get things wor ...
- 生成动态前缀且自增号码的Oracle函数
create or replace Function GetInvitationNO(prev varchar2, num1 varchar2, num2 varchar2, sessionSetti ...
- 常用设备类别及其GUID
Class ClassGuid 说明 1394 6BDD1FC1-810F-11D0-BEC7-08002BE2092F 1394主控制器 CDROM 4D36E965-E325-11CE-BFC1- ...
- 5、WPF实现简单计算器-非常适合初学者练习
Sample Calculator 这是微软社区WPF的一个示例,在源程序的基础上我进行了一点点修改,非常适合初学者练习,详细代码解释. 源程序的下载地址 http://code.msdn.micro ...