c++训练题(求某个数的最大质数因子)兼自己写的一个打印一定范围内质数方法

原创 2015年07月09日 16:28:38

题目:Largest prime factor

The prime factors of 13195 are 5 7 13 29, what is the largest prime factor of the number 600851475143?

大概意思是,数13195的质数因子为5 7 13 29,求600851475143的最大质数因子是多少?

首先插点题外话,打印10000以内的质数,分析:1.质数除了2都是奇数,2.自然数只要不被前面小于它开方的质数整除它就是质数。我是用vector向量来保存数据的,动态的易保存。

代码:

// prime_number.cpp : 定义控制台应用程序的入口点。
//求1~10000内的质数
//质数除了2都是奇数
//自然数只要不被前面的质数整除它就是质数
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <iomanip>

using namespace std;
bool primeNum(int num, vector<int> vec)
{
	int sq=sqrt(num*1.0);
	vector<int>::iterator iter;
	for(iter=vec.begin(); iter!=vec.end(); iter++)
	{
		if((*iter)<(sq+1))
		{
			if(num%(*iter)==0)
			{
				return false;
			}
		}
		
	}
	return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
	//第一个质数是2
	vector<int> num;
	num.push_back(2);
	bool flag=false;
	for(int i=3; i<10000; i=i+2)
	{
		flag=primeNum(i, num);
		if(flag==true)
		{
			num.push_back(i);
		}
	}
	vector<int>::iterator iter;
	for(iter=num.begin(); iter!=num.end(); iter++)
	{
		cout<<setw(4)<<*iter<<"  ";
	}
	system("pause");
	return 0;
}

结果:


言归正传,这个题我首先想的是把质数全部保存下来,一直保存到该数开方的位置,然后循环质数来被它整除,结果发现运算量太大,放弃了这个想法。后换了个思路,先求出它的因子,然后判断是不是质数,然后保存最大的质数因子。

代码:

// test0709.cpp : 定义控制台应用程序的入口点。
//题目:

#include "stdafx.h"
#include  <iostream>
#include <algorithm>
#include <cmath>
#include <vector>

using namespace std;
//如果前面的数不能被整除,就是质数因子
bool prime(vector<long long> vec)
{
	long long num=*(vec.end()-1);
	vec.pop_back();
	vector<long long>::iterator iter;
	for(iter=vec.begin(); iter!=vec.end(); iter++)
	{
		if(num%(*iter)==0)
		{
			return true;
		}
	}
	return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
	long long num=317584931803;
	long sq=sqrt(num*1.0);
	vector<long long> vec;
	for(int i=3; i<(sq+1); i=i+2)
	{//把能整除的奇数结果都保存在向量中
		if(num%i==0)
		{
			vec.push_back(i);
			vec.push_back(num/i);
		}
	}
	vector<long long>::iterator iter;
	for(iter=vec.begin();iter!=vec.end(); iter++)
	{
		cout<<*iter<<" ";
	}
	cout<<endl;
	//先排序
	sort(vec.begin(),vec.end());//,greater<long long>()
	//从这些结果中筛选质数
	//判断是否是质数
	bool flag;
	int s=vec.size();
	for(int i=0; i<s; i++)
	{
		flag=prime(vec);
		if(flag==true)
		{
			vec.pop_back();
			continue;
		}
		else
		{
			cout<<*(vec.end()-1)<<endl;
			break;
		}
	}
	system("pause");
	return 0;
}



Largest prime factor(最大素数因子)

Largest prime factor   Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java...
  • qaz135135135
  • qaz135135135
  • 2016年07月21日 09:42
  • 596

(hdu step 2.1.3)Largest prime factor(求一个数的最大质因子的位置)

题目:       Largest prime factorTime Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja...
  • caihongshijie6
  • caihongshijie6
  • 2015年01月30日 20:34
  • 1802

求某个数范围内的素数个数

#include #include using namespace std;int main(int argc, char *argv[]) { QCoreApplication a(arg...
  • u012484779
  • u012484779
  • 2016年07月11日 00:35
  • 804

用javascript实现求某个范围内最大素数

此代码可以实现求某个范围内的最大素数,用到的知识和c语言很类似,在这里就不一一解说了。 function findMax(i) { var flag; ...
  • liuzuyi200
  • liuzuyi200
  • 2013年11月30日 21:38
  • 1346

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

传说中的随机算法。 效率极高。 可以对一个2^63的素数进行判断。 可以分解比较大的数的因子。 #include #includestring.h> #include #i...
  • z309241990
  • z309241990
  • 2014年07月28日 22:37
  • 1154

关于最大素数

这些天很无聊的了解了一下几个数学题     由对王垠的40行代码引发,先是研究了尾递归,后又由于王垠的文章《谈P=NP?》了解了一下当今数学的七大难题,于是又去查其中一个庞加莱猜想的事情(庞加莱猜想...
  • huanghui167
  • huanghui167
  • 2015年01月15日 09:55
  • 1041

找出从 3 开始到某个数值范围内的所有质数

找出从 3 开始到某个数值范围内的所有质数今天是第一次写博文,其实我是抗拒的。在某个人的威逼下,现在我把我每天学习到的知识分享在网络上,希望在以后的日子里,大家能和我一起学习。 可能格式没有太标...
  • a531227909
  • a531227909
  • 2015年09月07日 22:57
  • 841

找出范围内所有质数

  • 2013年11月13日 20:16
  • 416B
  • 下载

POJ 1811 Prime Test(大素数判断+大合数素因子分解)

题意:判断n(n 思路:这题肯定不能用普通的枚举来做, 对于判断大素数,可以用Miller_Rabin随机算法进行素性检验,而分解素因数可以使用Miller_Rabin搭配Pollard_rho算...
  • u014664226
  • u014664226
  • 2015年09月08日 18:17
  • 726

n!素因子分解中素数p的幂

n!素因子分解中素数p的幂为 [n/p]+[n/(p^2)]+[n/(p^3)]+…… nefu 118 传送门 n!后面有多少个0 ...
  • u011699990
  • u011699990
  • 2015年04月05日 13:59
  • 882
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++训练题(求某个数的最大质数因子)兼自己写的一个打印一定范围内质数方法
举报原因:
原因补充:

(最多只允许输入30个字)