(math) SmoothNumbersHard --largest prime factor(最大质数因子)

http://www.topcoder.com/tc?module=Static&d1=match_editorials&d2=srm388

题目:求一系列数的最大质数因子
看代码,运行代码。a数组是标示哪个是质数的,1代表是质数,0代表是非质数。如果这个有个质数i计算过了,则含这个i因子的数都标为0
b数组时标示每个数的最大质数因子的,随着i的增大不断改变。
比如6,计算到i=2的时候 b[6]=2.但当计算到i=3的时候,b[6]=3,这才是它的最大质数因子

#include <iostream> 
#include <fstream> 
#include <math.h> 
#include <string> 
#include <vector> 
#include <algorithm> 
using namespace std; 

class SmoothNumbersHard 
{ 
public: 
	int countSmoothNumbers(int N, int k) 
	{ 
		int num =1;
		vector<int> a(N+1);//存是否还是质数的标识,1代表还是,0不是质数了
		vector<int> b(N+1);//存数的最大质数因子,b[4]=2,b[5]=5,b[6]=3...
		for (int i=2;i<=N;i++)
		{
			a[i]=1;
		}
		//质数因子不断增大
		for (int i=2;i<=N;i++)
		{

			if(a[i]==1){
				//这里不要忘了
				b[i] = i;
				for (int j=2;i*j<=N;j++)
				{
					//把含这个质数因子i的标为0,即标为0后表明这个数不是质数
					a[i*j] = 0;
					//i*j这个数的最大质数因子随着i的增大不断赋值,直到最大的那个
					b[i*j] = i;
				}
			}
		}

		for (int i = 2;i<=N;i++)
		{
			if (b[i] <= k)
			{
				num++;
			}
		}
		return num;
	} 
};

你可能感兴趣的:(C++,c,C#,J#)