因式分解

第一种,试除法

第二种,先求质数,在试除质数

#include <iostream>
#include <vector>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>

using namespace std;

std::vector<int> res;
std::vector<int> primes;
int len;
void input(){
cin >> len;
}

void calc(){
int nn = len;
std::vector<int>().swap(res);
for (int i = 2 ; i <= len ; i++){
//cout << nn << " " << i<<endl;
if (nn == 1){
return;
}
if (nn == i){
res.push_back(i);
return;
}
while(nn%i == 0){
res.push_back(i);
nn/=i;
}
}
}

void calc2(){
int nn = len;
std::vector<int>().swap(res);
for (int i = 0 ; i <= primes.size() ; i++){
//cout << nn << " " << i<<endl;
if (nn == 1){
return;
}
if (nn == primes[i]){
res.push_back(primes[i]);
return;
}
while(nn%primes[i] == 0){
res.push_back(primes[i]);
nn/=primes[i];
}
}
}

void output(){
cout << len<<":";
for (int i = 0 ; i < res.size(); i++){
cout << res[i] << " ";
}
cout << endl;
}

void getPrime0(int n){
bool m;
for(int i = 2; i <= n; i ++){
m = true;
for(int j = 0; j < primes.size(); j++){
if(i % primes[j] == 0){
m = false;
break;
}
}
if(m){
primes.push_back(i);
}
}
// for(int i = 0 ; i < primes.size() ; i++){
// cout << primes[i]<< " ";
// }
// cout << endl;

}

int main(){
int a = 99999;
getPrime0(a);
while(true)
{
input();
//calc();
calc2();
output();
}

return 0;
}

时间: 2025-01-02 16:07:07

因式分解的相关文章

阶乘因式分解(一)(南阳oj56)

阶乘因式分解(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 给定两个数m,n,其中m是一个素数. 将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m. 输入 第一行是一个整数s(0<s<=100),表示测试数据的组数 随后的s行, 每行有两个整数n,m. 输出 输出m的个数. 样例输入 2 100 5 16 2 样例输出 24 15 来源 网络 上传者 苗栋栋 #include<stdio.h> int main()

NYOJ 56 阶乘因式分解

阶乘因式分解(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 给定两个数m,n,其中m是一个素数. 将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m. 输入 第一行是一个整数s(0<s<=100),表示测试数据的组数 随后的s行, 每行有两个整数n,m. 输出 输出m的个数. 样例输入 2 100 5 16 2 样例输出 24 15 代码如下: #include<iostream> using namespace st

因式分解假想:可因式分解的数用矩形变形来解

仓库:  factorization 因式分解假想:可因式分解的数用矩形变形来解 111 111 111 这表示3乘3=9 表示9可以因式分解为3和3 这是一个矩形(长方形) 在9基础上再加1, 是9邻近的数(9的下一个数), 是10, 表示为: 111 111 111 1** 假设10能够因式分解(10是9的下一个数,任意数能因式分解,其下一个数未必能因式分解,能不能这个问题先不管) *表示空白, 如果此时能够让这个图形变形为一个矩形, 并让空白消失, 那么这个矩形就是10的因式分解形式. 现

因式分解 和 分式方程

因式分解:把一个多项式化为几个整式的乘积叫做因式分解. 1.因式分解的结果用乘积的形式表示. 2.积的各个因式必须是整式. 3.只有多项式才能因式分解. 例:5ax +5bx + 3ay + 3by =5x(a+b) + 3y(a+b) =(5x+3y)(a+b) 分式方程的解法: 1.去分母:方程两边同乘最简公分母. 2.解方程:去括号,移项,合并同类项,化系数1. 3.检验:将求得的解代入最简公分母,如果最简公分母的值不为0,则它是分式方程的解. 例1:解方程(x/x-1) -1 = (3/

阶乘因式分解(一)

阶乘因式分解(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 给定两个数m,n,其中m是一个素数. 将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m. 输入 第一行是一个整数s(0<s<=100),表示测试数据的组数 随后的s行, 每行有两个整数n,m. 输出 输出m的个数. 样例输入 2 100 5 16 2 样例输出 24 15 my answer:#include<iostream> using namespace

POJ 3421 X-factor Chains (因式分解+排列组合)

题意:一条整数链,要求相邻两数前一个整除后一个.给出链尾的数,求链的最大长度以及满足最大长度的不同链的数量. 类型:因式分解+排列组合 算法:因式分解的素因子个数即为链长,链中后一个数等于前一个数乘以某素因子,所以链的数量即为这些因子不全相异的全排列数:A!/(a1!a2!a3!..) #include <cstdio> #include <cmath> #include <iostream> using namespace std; typedef long long

最大公因数、最小公倍数、因式分解

最大公因数使用辗转相除法来求,最小公倍数则由这个公式来求. 最大公因数*最小公倍数=两数乘积  解法最大公因数可以使用递归与非递归求解,因式分解基本就是使用小于输入数的数值当作除数,去除以输入数值,如果可以整除就视为因数,要比较快的解法就是求出小于该数的所有质数,并试试看是不是可以整除,求质数是另一个问题,请参考Eratosthenes筛选求质数. 一.求最大公因数.最小公倍数 #include<stdio.h> #include<stdlib.h> int main(void){

砝码称重问题,因式分解有妙用

如果天平两端都允许放砝码,并且假定所有的砝码都是整数克.为了称出从 1 克到 40 克 所有整数克 的物品,最少需要几个砝码? 感兴趣的读者不妨自己先试着想想,再往下看. 秘密在于 3 的幂 说起来这个问题历史还算是挺悠久的.据<数学游戏与欣赏>( [英] 劳斯·鲍尔 [加] 考克斯特 著,杨应辰等 译),这个问题被称作巴协 (Bachet) 砝码问题:而据<数学聊斋>(王树禾著),该问题至少可追溯到 17 世纪法国梅齐里亚克 (Meziriac, 1624) .他们给出的答案是:

nyist 70 阶乘因式分解(二)

阶乘因式分解(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 给定两个数n,m,其中m是一个素数. 将n(0<=n<=2^31)的阶乘分解质因数,求其中有多少个m. 注:^为求幂符号.   输入 第一行是一个整数s(0<s<=100),表示测试数据的组数随后的s行, 每行有两个整数n,m.  输出 输出m的个数 样例输入 3 100 5 16 2 1000000000 13 样例输出 24 15 83333329 #include <std

nyist 56 阶乘因式分解(一)

阶乘因式分解(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 给定两个数m,n,其中m是一个素数. 将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m. 输入 第一行是一个整数s(0<s<=100),表示测试数据的组数随后的s行, 每行有两个整数n,m. 输出 输出m的个数. 样例输入 2 100 5 16 2 样例输出 24 15 #include<stdio.h>int main(){ int s1,n,m,s,j,