uva 10780 Again Prime? No Time.

POINT : 质因子分解;(仅给题解)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1721

题意:给你两个整数m和n,求最大的k使得m^k是n!的约数

思路:首先我们先将m分解质因数,那么m^k就是各个质因数*k而已,那么我们只要判断每个质因数的指数在n!的对应的质因数的指数范围内,求所有质因数最小的一个,至于怎么求n!里某个质因数的个数,比如是2的话,那么只要计算n/2+n/4+n/8...的个数就行了,可以这么想没隔2个数就有一个2,然后是4...

此处注意如何求n!中某个质因数个数的方法。

uva 10780 Again Prime? No Time.

时间: 2024-10-04 09:08:48

uva 10780 Again Prime? No Time.的相关文章

uva 10780 Again Prime? No Time. 质因子乱搞

求最大的k   使得 m^k 能被n!整除 m^k就是让m的每个质因子个数增加了k倍,只要求得n!的质因子能让m增加多少倍就够了.当然这里要取增加倍数最少的. 木桶装水的量取决于最短的木板. 预处理2-n每个数的质因子情况,由于n有10000,前10000个素数有1000+个,所以维护前缀和不划算. case只有500 所以干脆每次都算一遍. #include<stdio.h> #include<string.h> #include<iostream> #include

UVA - 10780 Again Prime? No Time. (质因子分解)

Description Again Prime? No time. Input: standard input Output: standard output Time Limit: 1 second The problem statement is very easy. Given a number n you have to determine the largest power of m, not necessarily prime, that divides n!. Input The

UVa 10780 - Again Prime? No Time.(唯一分解)

输入n.m,求最大k使(mk)%n=0.首先筛选出所有素数,然后求出所有n,唯一分解的结果.对于m进行分解,对于每一个在m中的素数p[i]的指数e[i],k=min(e[i]). #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=10010; int p[maxn],pnum,en[maxn][1250],em[maxn]; bool np

uva 1415 - Gauss Prime(高斯素数)

题目链接:uva 1415 - Gauss Prime 题目大意:给出一个a,b,表示高斯数a+bi(i=?2 ̄ ̄ ̄√,推断该数是否为高斯素数. 解题思路: a = 0 时.肯定不是高斯素数 a != 0时,推断a2+2b2是否为素数就可以. #include <cstdio> #include <cstring> #include <cmath> bool is_prime (int n) { int m = sqrt(n+0.5); for (int i = 2;

UVA 10780

Problem 给两个整数M,N,要求找到最小的正整数K,使得(M^k)可整除(N ! ).输出K,若不存在,输出不存在. Limits Time Limit(ms): 3000 Memory Limit(MB): No Limit M: [2, 5000] N: [1, 10000] 不超过500个case Solution 分解素因数,将M表示成(Pi1^Ki1)*(Pi2^Ki2)*......*(Pin^Kin) ,再将 N ! 表示成 (Pj1^Kj1)*(Pj2^Kj2)*.....

uva 11610 Reverse Prime

Problem FReverse Prime Input: Standard Input Output: Standard Output There are a few 7 digit positive numbers whose reverse number is a prime number and less than 10^6.  For example: 1000070, 1000090 and 1000240 are first few reverse prime numbers be

uva 10539 - Almost Prime Numbers(数论)

题目链接:uva 10539 - Almost Prime Numbers 题目大意:给出范围low~high,问说在这个范围内有多少个数满足n=pb,(p为素数). 解题思路:首先处理出1e6以内的素数,然后对于每个范围,用solve(high)?solve(low?1),solve(n)用来处理小于n的满足要求的数的个数.枚举素数,判断即可. #include <cstdio> #include <cstring> typedef long long ll; const int

UVA 1415 - Gauss Prime(数论,高斯素数拓展)

UVA 1415 - Gauss Prime 题目链接 题意:给定a + bi,推断是否是高斯素数,i = sqrt(-2). 思路:普通的高斯素数i = sqrt(-1),推断方法为: 1.假设a或b为0.推断还有一个数为4 * n + 3形式的素数(用到费马平方和定理) 2.假设a.b都不为0,推断a ^ 2 + b ^ 2 是否为素数 那么这题,提取出sqrt(2)来,就和基本情况一样了. 对于2,变成: 假设a.b都不为0,推断a ^ 2 + 2 b ^ 2是否为素数 对于1.事实上仅仅

UVa 10780 (质因数分解) Again Prime? No Time.

求mk整除n!,求k的最大值. 现将m分解质因数,比如对于素数p1分解出来的指数为k1,那么n!中能分解出多少个p1出来呢? 考虑10!中2的个数c:1~10中有10/2个数是2的倍数,c += 5:1~10中有10/4个数是4的倍数,所以c += 2,其中有10/8 = 1个数是8的倍数,所以c += 1: 这样10!中就能分解出8个2 对于每个素数p,求出ci / ki的最小值就是答案. 1 #include <cstdio> 2 #include <cmath> 3 #inc