快速求n的质因子(数论)
2024-10-18 18:20:14
快速求n的质因子
如何尽快地求出n的质因子呢?我们这里又涉及两个好的算法了!
第一个:用于每次只能求出一个数的质因子,适用于题目中给的n的个数不是很多,但是n又特别大的
#include<stdio.h>
int main()
{
__int64 a[100],num,i,n;
while(scanf("%I64d",&n)!=EOF)
{
num=0;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
a[num++]=i;
while(n%i==0)
n=n/i;
}
}
if(n>1)
a[num++]=n;
for(i=0;i<num;i++)
printf("%I64d ",a[i]);
printf("\n");
}
return 0;
}
第二个:一次求出1~n的所有数的质因子,适用于题目中给的n个数比较多的,但是n不是很大的。
#include<iostream>
#include<vector>
#include<algorithm>
#include<string.h>
using namespace std;
int visited[100010];
vector<int>a[100010];
void init()
{
int i,j;
for(i=0;i<100010;i++)
a[i].clear();//vector的清空
memset(visited,0,sizeof(visited));
for(i=2;i<=100000;i++)
{
if(visited[i]==0)//i是素数这是可以保证的
{
a[i].push_back(i);
for(j=i+i;j<=100000;j+=i)//筛选素数,其实这种方法没以前那种素数法快,但是这里用来求一个数的质因子就比较好了
{
visited[j]=1;
a[j].push_back(i);
}
}
}
}
int main()
{
int i,j;
init();
for(i=0;i<=50;i++)
{
printf("%d:",i);
for(j=0;j<a[i].size();j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
转载自:http://www.cnblogs.com/jiangjing/archive/2013/06/03/3115470.html
最新文章
- [LeetCode] Range Sum Query - Mutable 区域和检索 - 可变
- flask+sqlite3+echarts3+ajax 异步数据加载
- Vitrualbox虚拟机网络设置
- docker网络基础配置
- 在win 7 vs2013下 web 调试 出现“ iis Express Worker Process 已停止工作”错误
- [读书笔记]C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器
- Angular系列----AngularJS入门教程00:引导程序(转载)
- 删除binlog的方法
- Huge CSV and XML Files in Python, Error: field larger than field limit (131072)
- android-ramdisk.img分析、recovery.img&;boot.img执行过程
- PowerDesigner 怎么给 Table Properties 增加注释和默认值
- eclipse处理长字符串拼接快捷方法类
- 回想一下著名的BigTable论题
- 介绍call和apply
- Precision 7520双硬盘无法识别固态硬盘
- Elasticsearch6.x和Kibana6.x的安装
- dskinlite(uieasy mfc界面库)使用记录2:绘制动态元素(按钮控件绘制元素动态控制,改变图片和文字)
- Apache-Flink深度解析-DataStream-Connectors之Kafka
- [Java JNI] [Windows] [Visual Studio] [DLL] [UnsatisfiedLinkError]
- IDM的Google商店插件