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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值