Analiza programów

17.06.2009

Żmudne dzielenie

 
#include <cstdio>
 
int dividers [ 8000008 ], //REV: stała 8000008 zasługuje na zdefiniowanie const'em
	result [ 100 ],
	number,
	position;
 
void erastotenes ( void ); //REV: dużo tekstu o pustce
 
int main ( void )
{
	erastotenes ( );
	while ( scanf ( "%d", & number ) != -1 && 
			number ) //REV: ==1 jest bezpieczniejsze
	{
		position = 0;
		while ( number > 1 )
		{
			if ( ! dividers [ number ] )
				dividers [ number ] = number;
 
			result [ position ++ ] = dividers [ number ];
			number /= dividers [ number ]; 
		}
		//REV: cały poniższy kod, to chyba:
    //REV: while(position--)printf("%d%c",result[position],position?'^':'\n');
		-- position;
 
		while ( position > 0 )
			printf ( "%d*", result [ position -- ] );
 
		printf ( "%d\n", result [ 0 ] );
	}
	return 0;
}
 
void erastotenes ( void )
{
	dividers [ 0 ] = dividers [ 1 ] = 1;//REV: kiedy uzywamy [0] ?
 
	for ( int i = 2; i * i < 8000008; ++ i )//REV: jaka liczba ma kwadrat większy niż 8000000 ale mniejszy niż 8000008 ?
	{
		if ( dividers [ i ] )//REV: łatwy do wyeliminowania continue
			continue;
 
		for ( int  j = i; j < 8000008; j += i ) //REV: możnaby j=i*i
			dividers [ j ] = i;
	} 
}
 

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com