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



相关文章推荐

求600851475143的最大质因数

题目原文: 求600851475143的最大质因数   """对于给定的n, 使factor = 2, 3, 4, 5, 6..., 对于每个factor, 当factor能...

①C#,利用数组求一个范围内的质数

/*质数(prime number)又称素数,有无限个。除了1和它本身以外不再有其他的因数;否则称为合数。 * 根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么...

用c++建立一个类PrimeNUM,求指定数据范围内的所有素数(质数)。

具体要求如下: (1)私有数据成员 int data[25]:依次存放在指定范围内求出的所有素数。 int low,high:存放指定的数据范围的下限和上限。 int num:存放low与...

JavaScript求指定范围内的质数

质数是大于1的自然数中,没有除了1和它自身之外其他因子的数。 这篇帖子,将考虑如何求指定范围内的质数。   实现函数有如下的特性: 1.它接受2个参数,代表两个边界,比如getPrimes(0...
  • esir82
  • esir82
  • 2017年03月07日 12:01
  • 414

计算给定范围内质数

  • 2015年12月19日 09:22
  • 6KB
  • 下载

找出范围内所有质数

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

Python用无限制数组实现求素数,不限制质数的个数,用筛选的方法!

#相信很多人能写出比我还精简的算法 #但你能写出比Python还优雅的算法吗?! import math #动用并 import 导入 math 函数 A=[] #A[]里放质数数列, 每次用...
  • aw344
  • aw344
  • 2015年03月21日 08:01
  • 1156

求范围内的最大孪生素数

  • 2014年09月08日 11:05
  • 755B
  • 下载

【HDU】5901】【模板题】Count primes 【Meisell-Lehmer求质数个数】

传送门:HDU5901 描述: Count primes Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++训练题(求某个数的最大质数因子)兼自己写的一个打印一定范围内质数方法
举报原因:
原因补充:

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