ブルーブリッジカップ1464:品質係数の[ブルーブリッジカップ] [基本的な練習のVIP]分解

基本的な考え方:

品質係数の典型的な問題解決分解。問題を欠いています。

 

キーポイント:

SQRT(N)の1注反復使用は、特定の時間の複雑さを低減することができます。

2.具体的には、列挙時に自然な順序を発注していません。

 

#include <iostreamの> 
する#include <STDLIB.H> 
する#include <stdio.hに> 
する#include <ベクトル> 
の#include <ストリング> 
の#include <math.h>の
書式#include <アルゴリズム> 
の#include <CStringの> 
名前空間STDを使用して、

const int型MAXN = 1000000; 

構造体ノード{ 
	int型FAC = -1。
	int型CNT = 0; 
}。

BOOL primecharge [MAXN]。


ボイドのinit(){ 
	//进行素数初始化; 
	フィル(primecharge、primecharge +のMAXN、TRUE)。
	primecharge [0] = primecharge [1] = FALSE; 
	以下のために(INT I 2 =; I <MAXN; I ++){ 
		IF(primecharge [I]){ 
			ため(INT J = + I、J <MAXN; J + = 1){ 
				primecharge [I] = FALSE;
} 
			IF(フラグ){

ボイドFUNC(int型N){ 
	int型温度= N。
	ベクター<ノード>因子。
	INT SQ = INT(SQRT(N))。
	以下のために(INT I = 2、I <= SQ; I ++){ 
		IF(N%I == 0){ 
			ノードF。
			f.fac = I; 
			(N%I == 0){つつ
				; //私为因子
				のI / N = N。
				f.cnt ++; 
			} 
			factor.push_back(F)。
		} 
	} 
	もし(!N = 1){ 
		ノードF。
		f.fac = N。
		f.cnt = 1。
		factor.push_back(F)。
	} 
	のprintf( "%d個="、TEMP)。
	ブールフラグ= TRUE。
	{(I ++; I <factor.size()intは、I = 0)するための
		ための(int型J = 0; J <因子[I] .CNT; J ++){
				printf( "%dの"、因子[I] .fac)。
				フラグ= falseは、
			} 
			他{ 
				のprintf( "*%のD"、因子[I] .fac)。
			} 
		} 
	} 
} 

int型のmain(){ 
	INIT()。
	int型のA、B; 
	CIN >> B; 
	以下のために(INT iが=; I <= B; I ++){ 
		FUNC(I)。
		coutの<<てendl; 
	} 
}

  

おすすめ

転載: www.cnblogs.com/songlinxuan/p/12284140.html