poj 2649 Factovisors 对n!进行因数分解
2024-08-30 10:00:13
Factovisors
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 4431 | Accepted: 1086 |
Description
The factorial function, n! is defined thus for n a non-negative integer:
0! = 1
n! = n * (n-1)! (n > 0)
We say that a divides b if there exists an integer k such that
k*a = b
Input
The input to your program consists of several lines, each containing two non-negative integers, n and m, both less than 2^31.
Output
For each input line, output a line stating whether or not m divides n!, in the format shown below.
Sample Input
6 9
6 27
20 10000
20 100000
1000 1009
Sample Output
9 divides 6!
27 does not divide 6!
10000 divides 20!
100000 does not divide 20!
1009 does not divide 1000!
Source
#include <iostream>
#include <vector>
#include <cstring>
#include <cstdio>
using namespace std;
const int MAXN=;
bool vis[MAXN+];
int prime[MAXN+];
int n,m,p;
vector<pair<int,int> > exp; void init()//素数筛选
{
memset(vis,,sizeof(vis));
p=;
for(int i=; i<=MAXN; ++i)
{
if(vis[i]==false)
prime[p++]=i;
for(int j=; j<p&&i*prime[j]<=MAXN; ++j)
vis[i*prime[j]]=true;
}
} bool check(int x,int y)//判断当前的素数,n是否有这么多个
{
int tmp=n,sum=;
while(tmp)
{
sum+=tmp/x;
tmp/=x;
}
return y<=sum;
} bool judge()
{
for(int i=; i<exp.size(); ++i)
if(!check(exp[i].first,exp[i].second))
return false;
return true;
} int main()
{
init();
while(scanf("%d%d",&n,&m)==)
{
if(m==)
{
printf("%d does not divide %d!\n",m,n);
continue;
}
exp.clear();
int t=m;
for(int i=; i<p&&prime[i]<=m; ++i)
if(m%prime[i]==)
{
int cnt=;
while(m%prime[i]==)
{
m/=prime[i];
++cnt;
}
exp.push_back(make_pair(prime[i],cnt));//m的素数个数与m的素数因子对应
}
if(m!=)
exp.push_back(make_pair(m,));
if(judge())
printf("%d divides %d!\n",t,n);
else
printf("%d does not divide %d!\n",t,n);
}
return ;
}
最新文章
- 回调函数透彻理解Java
- Java 线程 — ScheduledThreadPoolExecutor
- bash 中的变量
- Linux环境下实现哲学家就餐问题
- oracle 条件语句的写法
- Package &#39;chkconfig&#39; has no installation candidate
- 09-排序3 Insertion or Heap Sort
- 三方贸易-drop ship
- 五.CSS盒子模型
- xmlns:tools=";http://schemas.android.com/tools";以及tools:context=";.ConfActivity";是什么意思
- OpenRisc-48-or1200的SPRS模块分析
- MTU介绍以及在windows和linux下怎么设置MTU值
- 前端JS面试题汇总 Part 3 (宿主对象与原生对象/函数调用方式/call与apply/bind/document.write)
- input 图片上传,第二次上传同一张图片失效
- 20175329 2018-2019-3《Java程序设计》第五周学习总结
- nginx配置虚拟主机vhost的方法详解
- oracle生成AWR报告方法
- 爬虫--cheerio
- Xamarin/Mono IOS Limitations
- Tornado使用-队列Queue