因式分解

第一种,试除法

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

#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;
}

posted @   Shiyu_Huang  阅读(192)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示