UVa 10139 - Factovisors
2013-06-08 07:59
190 查看
输入Case和num,求Case!是否能整除num。
思路:将num质数分解,然后用Case!对每个num质数分解后的素数求指数,和num这个素数比较,如果小于,说明不能整除。
思路:将num质数分解,然后用Case!对每个num质数分解后的素数求指数,和num这个素数比较,如果小于,说明不能整除。
/************************************************************************* > File Name: 10139.cpp > Author: Toy > Mail: ycsgldy@163.com > Created Time: 2013年06月07日 星期五 22时35分00秒 ************************************************************************/ #include <algorithm> #include <iostream> #include <iomanip> #include <cstring> #include <cstdlib> #include <climits> #include <sstream> #include <fstream> #include <cstdio> #include <string> #include <vector> #include <queue> #include <cmath> #include <stack> #include <map> #include <set> using namespace std; const int INF = 0x7fffffff; typedef pair<int,int> II; typedef vector<int> IV; typedef vector<II> IIV; typedef vector<bool> BV; typedef long long i64; typedef unsigned long long u64; typedef unsigned int u32; #define For(t,v,c) for(t::const_iterator v=c.begin(); v!=c.end(); ++v) #define IsComp(n) (_c[n>>6]&(1<<((n>>1)&31))) #define SetComp(n) _c[n>>6]|=(1<<((n>>1)&31)) const int MAXP = 46341; //sqrt(2^31) const int SQRP = 216; //sqrt(MAX) int _c[(MAXP>>6)+1]; IV primes; IIV opt; void prime_sieve() { for ( int i = 3; i <= SQRP; i += 2 ) if ( !IsComp(i) ) for ( int j = i*i; j <= MAXP; j+=i+i ) SetComp(j); primes.push_back ( 2 ); for ( int i = 3; i <= MAXP; i += 2 ) if ( !IsComp(i) ) primes.push_back ( i ); } void prime_factorize ( int n, IIV &f ) { f.clear(); int sn = sqrt ( n ); For ( IV, it, primes ) { int prime = *it; if ( prime > sn ) break; if ( n % prime ) continue; int e = 0; for ( ; n%prime == 0; e++, n/= prime ); f.push_back ( II(prime,e) ); sn = sqrt(n); } if ( n > 1 ) f.push_back( II(n,1) ); } i64 get_powers ( int n, int p ) { i64 res = 0; for ( i64 power = p; power <= n; power *= p ) res += n/power; return res; } int Case, num; int main ( ) { prime_sieve(); while ( scanf ( "%d%d", &Case, &num ) == 2 ) { if ( num == 0 ) { printf ( "%d does not divide %d!\n", num, Case ); continue; } bool flag = 1; prime_factorize ( num, opt ); For ( IIV, it, opt ) { i64 tmp = get_powers ( Case, it -> first ); if ( tmp < it -> second ) { flag = 0; break; } } if ( flag ) printf ( "%d divides %d!\n", num, Case ); else printf ( "%d does not divide %d!\n", num, Case ); } return 0; }
相关文章推荐
- UVa 10139 Factovisors
- UVa Problem 10139 Factovisors (阶乘与整除)
- PC/UVa 题号: 110704/10139 Factovisors
- UVa 10139 - Factovisors
- UVa Problem Solution: 10139 - Factovisors
- UVa 10139 Factovisors (阶乘能否整除?)
- UVa-10139 Factovisors -(阶乘的整除)
- POJ2649 ZOJ1850 UVA10139 Factovisors【筛选法+勒让德定理】
- [UVA10139]Factovisors(数论,质因数)
- 【 UVa 10139】 Factovisors 【 m | n!? 】
- UVA 10139 Factovisors(数论)
- uva 10139 factovisors
- UVA 10139 Factovisors(数论)
- UVA 10139 Factovisors
- UVa 10139 Factovisors
- UVA——10139(数论)(挑战编程题目)
- PC 的 110704 和 UVa 上的 10139 提交结果
- UVA 10139 判断n的阶乘能否被m整除
- uva 10139 求n的阶乘能否整除m
- Uva 10139