1. 程式人生 > >求取a-b中約數最大數字的約數

求取a-b中約數最大數字的約數

環境:VS2015
// 最多約數問題.cpp : 定義控制檯應用程式的入口點。
//質因數分解,最大約數數的約數數量=累乘(不同質因數出現次數+1),如36=2*2*3*3,最大約數9=(2+1)*(2+1)

//求a-b之間最大約數數
#include "stdafx.h"
#define size 100
int m[100];


//求取約數
int pri(int n);

int main()
{
	int a = 0;int  b = 0;
	int max=0;
	while (scanf("%d %d",&a,&b))
	{
		
		

		//預處理,處理負數$$
		if (a < 0)
		{
			a = -a;
		}
		if (b < 0)
		{
			b = -b;
		}

		if (a > b)
		{
			int temp = b;
			b = a;
			a = temp;
		}
		//$$

		//獲取最大約數
		for (int i = a; i <= b; i++)
		{
			int newMax = pri(i);
			if (max < newMax)
			{
				max = newMax;
			}
		}
		printf("%d", max);
		max = 0;
	}
	//$$
    return 0;
}



//求取約數
int pri( int n)
{
	int temp = n;
	int count[size] = {0};
	for (int i = 2; i <= temp / 2; i++)
	{
		if (n%i == 0)
		{
			count[i] ++;		
			n /= i;
			i--;
		}
	
	}
	n = 1;
	for (int i = 0; i <= temp/2; i++)
	{
		if (count[i] > 0)
		{
			n *= (count[i] + 1);
		}
		
	}
	return n;

}