[UVA10139]Factovisors(数论,质因数)

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1080

题意:问n!能否被m整除。

给m分解质因数,用这些质因数以及他们的幂分别去除n,直到质因数的幂大于n。统计每一次的商,假如存在一个商小于质因数在m中出现的次数,说明n!不能被m整除了。uDEBUG好好用,没开LL一直wa,结果去查一下就查出来了。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 typedef long long LL;
 5 LL n, m;
 6 vector<LL> p, a;
 7
 8 void f(LL x) {
 9   p.clear(); a.clear();
10   LL xx = (LL)sqrt(x) + 1;
11   for(LL i = 2; i < xx; i++) {
12     if(x % i == 0) {
13       p.push_back(i);
14       LL cnt = 0;
15       while(x % i == 0) {
16         x /= i;
17         cnt++;
18       }
19       a.push_back(cnt);
20     }
21   }
22   if(x > 1) {
23     p.push_back(x); a.push_back(1);
24   }
25 }
26
27 LL mul(LL x, LL n) {
28   LL ret = 1;
29   while(n) {
30     if(n & 1) ret *= x;
31     n >>= 1; x *= x;
32   }
33   return ret;
34 }
35
36 int main() {
37   //freopen("in", "r", stdin);
38   //freopen("out", "w", stdout);
39   while(~scanf("%lld%lld",&n,&m)) {
40     if(m == 0) {
41       printf("%lld does not divide %lld!\n", m, n);
42       continue;
43     }
44     f(m); bool flag = 0;
45     for(LL i = 0; i < p.size(); i++) {
46       LL cnt = 0;
47       LL j = 1;
48       LL q = mul(p[i], j++);
49       while(n >= q) {
50         cnt += (n / q);
51         q = mul(p[i], j++);
52       }
53       if(cnt < a[i]) flag = 1;
54       if(flag) break;
55     }
56     if(!flag) printf("%lld divides %lld!\n", m, n);
57     else printf("%lld does not divide %lld!\n", m, n);
58   }
59   return 0;
60 }
时间: 2024-11-09 16:50:55

[UVA10139]Factovisors(数论,质因数)的相关文章

HDU3988-Harry Potter and the Hide Story(数论-质因数分解)

Harry Potter and the Hide Story Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2193    Accepted Submission(s): 530 Problem Description iSea is tired of writing the story of Harry Potter, so,

CF1174C Special Coloring Problem 数论(质因数性质),构造算法

https://codeforces.com/contest/1174/problem/C 题意:给定一个数字n,构造出一个数组,在这个数组下标[2,n]的区间内,每个元素对(ai,aj)如果i和j是互质数,那么ai != aj  并且数组的最大值要尽量小 思路:2个不相同的质数之间必然是互质数,2个合数如果没有共同的质因数那么也是互质数. 那么对于数字n,构造出的数组的最大值 m>=p ,p为区间[2,n]的质数个数.我们给每个质数下标分配一个独特的值,并让其他所有合数下标等于它们各自其中任意

数论——质因数分解(C++)

一.构造质数表 (1)试除法 源代码: #include<cstdio>int n,s(1),i[1001];int main(){ scanf("%d",&n); i[1]=2; printf("2 "); for (int a=3;s<n;a++) { bool t(0); for (int b=1;b<=s;b++) if (!(a%i[b])) t=true; if (!t) { s++; i[s]=a; printf(&qu

UVA 10139 Factovisors(数论)

Factovisors 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 The input to your program consists of several lines, each conta

简单数论之整除&质因数分解&唯一分解定理

[整除] 若a被b整除,即a是b的倍数,那么记作b|a("|"是整除符号),读作"a整除b"或"b能被a整除".a叫做b的约数(或因数),b叫做a的倍数. 简单数论之整除&质因数分解&唯一分解定理 原文地址:https://www.cnblogs.com/zjd-ac/p/10351608.html

[CodeForces - 1225D]Power Products 【数论】 【分解质因数】

[CodeForces - 1225D]Power Products [数论] [分解质因数] 题目描述 Time limit 2000 ms Memory limit 524288 kB Source Technocup 2020 - Elimination Round 2 Tags hashing math number theory *1900 Site https://codeforces.com/problemset/problem/1225/D 题面 Example Input 6

POJ 1181 大整数是否为素数以及求大整数的质因数-数论-(Miller_rabin+Pollard_rho)

题意:求一个整数是否是素数,如果不是,则输出它最小的质因数. 分析: 判断一个大整数是否为素数用Miller_rabin算法,求一个大整数的所有质因数用Pollard_rho算法.这题就是直接套模板. 另外这里的gcd和pow_mod不能用一般的方式,T了.代码里我注释掉的就是T了的写法. 代码: #include<iostream> #include<cmath> #include<ctime> #include<cstdio> #include<a

数论 - Miller_Rabin素数测试 + pollard_rho算法分解质因数 ---- poj 1811 : Prime Test

Prime Test Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 29046   Accepted: 7342 Case Time Limit: 4000MS Description Given a big integer number, you are required to find out whether it's a prime number. Input The first line contains the

数论,质因数,gcd——cf1033D 好题!

直接筛质数肯定是不行的 用map<ll,ll>来保存质因子的指数 考虑只有3-5个因子的数的组成情况 必定是a=pq or a=p*p or a=p*p*p or a=p*p*p*p 先用二分判后面三种情况 然后判第一种情况 由于不知道pq,而且无法直接求,我们间接用 d=gcd(a[i],a[j]) 来求 如果1<d<a[i],那么a[i]两个因数就可以确定是d,a[i]/d 反之a[i]两个因数未出现过,pq直接计算到贡献里去 但是可能有和a[i]相等的数,所以我们不先计算这样