素因子分解

使用唯一素因子分解定理进行:

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <cstring>
 4 #define ll long long
 5 const int MAX_N = 1000;
 6 int f[MAX_N + 1]; // 存储素因子
 7 int e[MAX_N + 1]; // 素因子的幂次
 8 int prime_factors(int n){
 9     memset(f,0,sizeof f),memset(e,0,sizeof e);
10     int cnt = 0; // 素因子的个数
11     int m = (int)sqrt(n + 0.5);
12     for(int i = 2 ; i <= m ; i++)if(n % i == 0){
13         f[cnt] = i;
14         while(n % i == 0) n /= i,e[cnt]++;
15         cnt++;
16     }
17     if(n > 1) f[cnt] = n,e[cnt++] = 1;
18     return cnt;
19 }
20 int main(){
21     for(int i = 2 ; i <= 100 ; i++){
22         int cnt = prime_factors(i); printf("%d:",i);
23         for(int j = 0 ; j < cnt ; j++){
24             printf("%d^%d",f[j],e[j]);
25             if(j != cnt - 1) printf("*");
26         }
27         printf("\n");
28     }
29     return 0;
30 }
时间: 2024-10-13 12:46:02

素因子分解的相关文章

python 素因子分解

在使用python解决问题之前,我们先说一下,什么是素因子分解 所谓素因子分解就是,先找这个数的所有约数(约数即:a%b == 0,也就是a可以被b整除) 例如:20的约数集合为 [1, 2, 5, 10, 20] 那么素因子分解呢? 就是从最小的素数约数开始除,也就是这个除数要满足两个条件,一是约数,二是素数 那么这里20的最小的素约数是2,所以我们从2开始除,并且一直除到不能被整出为止: num = 20 num = num / 2 num = 10(这里num依旧可以被2整除,所以再来一次

2-07. 素因子分解(20) (ZJUPAT 数学)

题目链接:http://pat.zju.edu.cn/contests/ds/2-07 给定某个正整数N,求其素因子分解结果,即给出其因式分解表达式 N = p1^k1 * p2^k2 *-*pm ^km. 输入格式说明: 输入long int范围内的正整数N. 输出格式说明: 按给定格式输出N的素因式分解表达式,即 N = p1^k1 * p2^k2 *-*pm ^km,其中pi为素因子并要求由小到大输出,指数ki为pi的个数:当ki==1即因子pi只有一个时不输出ki. 样例输入与输出: 序

[Introduction to programming in Java 笔记] 1.3.9 Factoring integers 素因子分解

素数 A prime is an integer greater than one whose only positive divisors are one and itself.整数的素因子分解是乘积等于此素数的集合.例如:3757208 = 2*2*2*7*13*13*397 public class Factors { public static void main(String[] args) { // Print the prime factors of N. long N = Lon

大素数判断和素因子分解【miller-rabin和Pollard_rho算法】

集训队有人提到这个算法,就学习一下,如果用到可以直接贴模板,例题:POJ 1811 转自:http://www.cnblogs.com/kuangbin/archive/2012/08/19/2646396.html 传说中的随机算法. 效率极高. 可以对一个2^63的素数进行判断. 可以分解比较大的数的因子. 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<time

poj1881:素因子分解+素数测试

很好的入门题 先测试是否为素数,若不是则进行素因子分解,算法详见总结贴 miller robin 和pollard rho算法 AC代码 #include <iostream> #include<stdio.h> #include<algorithm> #include<math.h> using namespace std; long long ans; long long gcd(long long a,long long b) { return b?g

PAT 2-07 素因子分解(C语言实现)

PAT 2-07 素因子分解(C语言实现) PAT 2-07 素因子分解(C语言实现),有需要的朋友可以参考下. 题目说明: 给定某个正整数N,求其素因子分解结果,即给出其因式分解表达式 N = p1^k1* p2^k2*…*pm^km. 输入格式说明: 输入long int范围内的正整数N. 输出格式说明: 按给定格式输出N的素因式分解表达式,即 N = p1^k1* p2^k2*…*pm^km,其中pi为素因子并要求由小到大输出,指数ki为pi的个数:当ki==1即因子pi只有一个时不输出k

大素数判断和素因子分解(miller-rabin,Pollard_rho算法)

#include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #include<iostream> #include<algorithm> using namespace std; //**************************************************************** // Miller_Rabin 算法进

Hrbust1328 相等的最小公倍数 (筛素数,素因子分解)

本文出自:http://blog.csdn.net/svitter/ 题意: 求解An 与 An-1是否相等. n分为两个情况-- 1.n为素数, 2.n为合数. =  =好像说了个废话..素数的时候,可以直接输出no,因为素数不可能和An-1相等.合数的时候,如果n是a^b次方,那么也是NO.原因很简单,之前数字的最小公倍数的n的因子次方数,不能超过n的次方数. //================================================================

HDU 3641 Treasure Hunting(阶乘素因子分解+二分)

题目链接:传送门 题意: 求最小的 ( x! ) = 0 mod (a1^b1*a2^b2...an^bn) 分析: 首先吧a1~an进行素因子分解,然后统计下每个质因子的指数,由于随着x的增大,质因子的个数是逐渐增加的 因此我们可以二分x,对x!进行素因子分解判断是否满足条件,然后求出最小的就可以了. 代码如下: #include <iostream> #include <cstring> #include <algorithm> #include <cstdi

ACdream 1084 寒假安排(阶乘素因子分解)

题目链接:传送门 分析: 求A(n,m)转化成k进制以后末尾0的个数.对k素因子分解,第i个因子为fac[i], 第i个因子的指数为num[i],然后再对n的对A(n,m)进行素因子分解,设count[i] 代表fac[i]对应的指数,ans = min{count[i]/num[i] } 代码如下: #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> u