習題 12:因子分解★----程序運行在VC++6.0下

習題 12:因子分解★


輸入n(1 <= n <= 1e9),有多組測試數據:
616
27


輸出:
616 = 2^3 * 7 * 11
27 = 3^3
(注意輸出空格,但行末不要有空格)


難度:for beginner


來源:http://www.yzfy.org/dis/listpost.php?tid=6&extra=page%3D1



tips:先得到一個數N,M = N開平方。用N除以2到M。可整除,得到的就是一個因子。把N除以上面的因子後再進行上面的一步。直到無法整除,則此時它爲質數了。把這些值相加就OK了。

// 12.cpp : Defines the entry point for the console application.
//

#define PB_ID 12
#define CP_VC6

#include "stdafx.h"
#include "math.h"
#include "stdio.h"
#include "time.h"

int factor[100];
int pos;

int next( int n)
{
	int i, flag;
	flag = 0;
	for (i=2; i<=sqrt(n); i++)
	{
		if( n%i == 0) {flag =1; break;}
	}
	if(flag == 0) 
	{
		factor[pos++] = n;
		return 1;
	}
	else 
	{
		factor[pos++] = i;
		return n/i;
	}

}

void divide(int n)
{
	int q;
	if(n >=2)
	{
		q = next(n);
		divide(q);
	}
}



int main(int argc, char* argv[])
{
	int n, i, tmp, result;
	long first, end;
	result = 1;
	while( scanf("%d",&n) != EOF)
	{
		first = clock();
		if(n == 1) 
		{
			printf("1 = 1\n");
			end = clock();
			printf("run time is %f s\n",(double)((end-first)/(double)CLOCKS_PER_SEC));
		}
		else 
		{
			printf("%d =",n);
			divide(n);
			factor[pos] = 0;  //flag
			for (i=0; i<pos; i++)
			{
				tmp = factor[i];
				if(tmp == factor[i+1] )
				{
					result++;
					continue;
				}
				else
				{
					printf(" %d", factor[i]);
					if(result != 1 ) 		
					{
						printf("^%d",result);
					}
					if(i != pos-1) printf(" *");
					result = 1;

				}

			}
			pos = 0;
			printf("\n");
			end = clock();
			printf("run time is %f s\n",(double)((end-first)/(double)CLOCKS_PER_SEC));
		}
	}
	return 0;
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章