分解质因数

分解质因数---蓝桥

烂漫一生 提交于 2020-01-17 02:55:15
题目描述 求出区间[a,b]中所有整数的质因数分解。 提示 先筛出所有素数,然后再分解。 数据规模和约定 2< =a< =b< =10000 输入 输入两个整数a,b。 输出 每行输出一个数的分解,形如k=a1 a2 a3…(a1< =a2< =a3…,k也是从小到大的)(具体可看样例) 样例输入 3 10 样例输出 3 = 3 4 = 2*2 5 = 5 6 = 2*3 7 = 7 8 = 2*2*2 9 = 3*3 10 = 2*5 很简单,只是一开始不知道哪错了。细心呀 AC代码: # include <stdlib.h> # include <stdio.h> # include <algorithm> # include <iostream> # include <string.h> # include <math.h> using namespace std ; int ys [ 10000 ] ; int ysi ; int prime ( int n ) { int flag = 0 ; for ( int i = 2 ; i <= sqrt ( n ) ; i ++ ) if ( n % i == 0 ) { flag = 1 ; //表示参数n不是素数 break ; } return flag ; } int main ( ) { int a , b , i

java 将一个正整数分解质因数(java50道经典编程题)

↘锁芯ラ 提交于 2019-12-27 01:33:47
题目 :将一个正整数分解质因数。例如:输入90,打印出90=2 3 3*5。 首先我们要对这个问题进行分析: 如果我们要对n分解质因数。应该先找到一个最小的质数k,而后按照下述步骤进行 1)如果这个质数恰好等于n,则说明分解质因数的过程已经结束,打印出即可; 2)但是如果n不等于k,但是n能被k整除,则应该打印出k的值,并且用n除以k的商,作为新的正整数n。重复执行第一步。 3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 我们还必须要明白质数的概念,作为质数,0和1不是质数。 根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。 话不多说直接上代码: import java . util . Scanner ; //分解质因数 public class Prime_factor { //n代表需要输入的正整数 static int n , k = 2 ; public static void main ( String [ ] args ) { System . out . print ( "请输入一个大于2的正整数:" ) ; Scanner scanner = new Scanner ( System . in ) ; int n =

[算法]分解质因数

£可爱£侵袭症+ 提交于 2019-12-04 18:07:30
分解质因数 问题描述 将一个正整数分解质因数. 例如,输入90,打印出 90=2 3 3*5 算法思路 首先还是构造好一个素数表 prime_list 遍历prime_list,从小到大开始寻找 即是n约数 ,找到就加入到res这个列表,n/这个素数,在从头开始遍历prime_list 代码示例 Python pt_list = [True] * 1000 # 筛表 prime_list = [] # 素数表 def isPrime(n): if not pt_list[n]: return False prime_list.append(n) for idx in range(n ** 2, len(pt_list), n): pt_list[idx] = False return True def resolvePrime(n): res = [] while True: for x in prime_list: if n % x == 0 and x < n: res.append(x) n //= x break elif x == n: res.append(x) return res # 构建好prime_list for x in range(2, 1000): isPrime(x) print(resolvePrime(90)) Java import java

AcWing 867. 分解质因数

安稳与你 提交于 2019-12-04 09:44:56
#include <iostream> #include <algorithm> using namespace std; void divide(int x) { for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) { //枚举的都是质因子,因为已经把1到i-1之间的所有质因子都除干净了 int s = 0; while (x % i == 0) x /= i, s ++ ; cout << i << ' ' << s << endl; }//n中最多包含一个大于sqrt(n)的质因子 if (x > 1) cout << x << ' ' << 1 << endl;//最后处理 cout << endl; } int main() { int n; cin >> n; while (n -- ) { int x; cin >> x; divide(x); } return 0; } 来源: https://www.cnblogs.com/QingyuYYYYY/p/11854462.html

分解质因数

匿名 (未验证) 提交于 2019-12-03 00:40:02
对于一个将要分解的数,我们从小到大枚举它可能被分解出来的每一个因子,从小到大枚举,这样就可以保证在分解出大的因子之前,所有的小的因子全部被除完,从而保证最终所有的因子一定是质数。 虽然分解质因数本身没有进行质数判断,但是还是求出了质因数。。哈哈 while (n!= 1 ) { for ( int i= 2 ;i<=n;i++ ) { if (n%i== 0 ) { n /= i; printf( " %d " ,i); if (n!= 1 )printf( " * " ); break ; } } } 通过代码可以看到,我们每分解出来一个因子之后,还是从最小的2继续枚举,从而保证分解的顺利进行,2被一个一个剔出来,全部剔完了之后就该剔3了。 完整的代码如下,T组数据每组数据一个n,对n进行分解质因数。 1 #include <cstdio> 2 #include<iostream> 3 using namespace std; 4 int n; 5 int T; 6 int main() 7 { 8 cin>> T; 9 while (T-- ) 10 { 11 scanf( " %d " ,& n); 12 // printf("%d=",n); 13 while (n!= 1 ) 14 { 15 for ( int i= 2 ;i<=n;i++ ) 16 { 17 if (n

用c#语言编写分解质因数

匿名 (未验证) 提交于 2019-12-02 22:10:10
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { // 1.提示并获取用户输入的合数,将该合数保存到变量number中 int number;   while (true) { Console.WriteLine("请输入一个合数(大于1):"); number = int.Parse(Console.ReadLine()); #region 判断number的值是否正确 if (number <= 1) { Console.Write("输入有误,输出的数字必须大于1,按回车键继续"); Console.ReadLine(); } else { //判断number是否是质数 bool isFind = false; for (int i = 2; i < number; i++) { if(number % i == 0) { isFind = true; break ; } } if (isFind ) { //不是质数 break;

分解质因数

痴心易碎 提交于 2019-12-02 18:15:15
原理:从小到大找约数,首先碰到的一定是质数(假设不是,之前肯定能找到约数,所以假设不成立)。找到了一个,就从这个数开始,把被除数剩下的部分再拿来分解质因数。 int a = 24; for (int i = 2; i <=a; i++) { if(a%i==0) { Console.WriteLine(i); a = a / i; i--; } } Console.ReadKey(); 来源: https://www.cnblogs.com/wanjinliu/p/11757106.html

分解质因数+唯一分解定理

∥☆過路亽.° 提交于 2019-12-02 10:46:57
唯一分解定理:任何一个大于1的自然数 N,如果N不为 质数 ,那么N可以唯一分解成有限个质数的乘积 这里P1<P2<P3......<Pn均为质数,其中指数ai是正整数。 分解质因数,一个数n的质因数只能全部小于等于sqrt(n),或者只有一个大于sqrt(n) map<int,long long>q; for(int j=2;j<=mid;++j) { if(!prime(j)) continue; int sum=0; while(a%j==0) { a/=j; sum++; } if(sum) { q[j]+=sum; } if(a==1) break; } if(a!=1) q[a]++; 来源: https://blog.csdn.net/sedcftyv/article/details/102753180

HDU-3240(卡特兰数+分解质因数后求逆元)

只愿长相守 提交于 2019-11-29 07:05:22
卡特兰数相关公式 : \(H_n = {C_{2n}^n \over n+1)}\) \(H_n = {(4n-2)\over n+1}\times H_{n-1}\) \(H_n = C_{2n}^n - C_{2n}^{n-1}\) $ H_n = \begin{cases} \sum_{i=1}^{n} H_{i-1} H_{n-i} & n \geq 2, n \in \mathbf{N_{+}}\ 1 & n = 0, 1 \end{cases} $ 因为 \(n\le 100000\) ,所以不考虑第四种,第一种和第三种种求组合数也不可以用递推来求,而用公式的话因为要预先算出阶乘和阶乘的逆元,在此题中m不保证为质数,所以也不好计算。 对于第三种,假设以及算出了 \(H_{n-1}\) 那么只需要求出 \({4n-2\over n+1}\) 即可 先把 m 分解质因数,然后对于分子 \(4n-2\) ,求出m分解后的质因子的所有指数,然后对于分母 \(n+1\) ,也求出m分解的质因子的所有指数,前后两个指数数组相减。剩下分子和分母与m互质的部分直接求即可,保留到递推答案pre中。 综上,当前递推的答案由一个变量pre 和一个指数数组共同记录,所以在地推出当前答案之后进行累加时,还要用pre乘所有质因子 #include <bits/stdc++.h> using