Posts Prime Factorization
Post
Cancel

Prime Factorization

分解质因数算法

分解质因数就是将一个整数n如90,分解成90 = 2 * 3 * 3 * 5;

算法步骤

  • 首先找出最小的质因数,如果这个质因数是自己,那么n只有一个质因数即自己

  • 然后当n != k时,如果n能整除k那么k就是n的一个质因数

  • 如果不能整除那么k += 1,并继续

非递归版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()  
{  
    int i,n;  
    std::cin>>n;  
    for(i=2;i<=n;i++)  
    {  
        while(n!=i)     //若i=n,则质因数就是n本身  
        {  
            if(n%i==0)  //若i是质因数,则打印出i的值,并用商给n赋新值  
            {  
                std::cout<<i; 
                n=n/i;  
            }  
            else break;//若不能被i整除,则算下一个i  
        }  
    }  
    std::cout<<n;   //这里是打印最后一个质因数,也就是等于i时的那个  
    return 0;  
}  

递归版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void PrimeFactor(int n)
{
	if (n > 1)
	{
		int prime = 0;
		for (int i = 2; i <= n; ++i)
		{
			if (n % i == 0)
			{
				prime = i;
				break;
			}
		}
		if (prime != 0)
		{
			PrimeFactor(n / prime);
			cout << prime << endl;
		}
		else
			cout << n;
	}
}

时间复杂度:

  • 最坏情况下 n
  • 一般情况下logn
OLDER POST NEWER POST

Comments powered by Disqus.

Search Results