C#,超级阿格里数字(超级丑数,Super Ugly Number)的算法与源代码

C#,超级阿格里数字(超级丑数,Super Ugly Number)的算法与源代码_第1张图片

1 丑数

超级阿格里数字(超级丑数,Super Ugly Number)由丑数(Ugly Number)拓展而来,不过其因子质数,是事先给定的。

C#,超级阿格里数字(超级丑数,Super Ugly Number)的算法与源代码_第2张图片

上面的超级丑数由质数因子(5,7,9)生成。

2 源程序

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Number_Sequence
    {
        ///


        /// 超级阿格里数字(超级丑数)
        ///

        /// 给定的质数数组
        ///
        ///
        public static int SuperUgly_Number(int[] primeArray, int n)
        {
            int size = primeArray.Length;
            if (n <= 0)
            {
                return -1;
            }
            if (n == 1)
            {
                return 1;
            }
            List heap = new List();

            for (int i = 0; i < size; i++)
            {
                heap.Add(primeArray[i]);
            }

            int count = 1;
            int number = 0;
            heap.Sort();

            while (count < n)
            {
                number = heap[0];
                heap.RemoveAt(0);
                if (number != heap[0])
                {
                    count++;
                    for (int i = 0; i < size; i++)
                    {
                        heap.Add(number * primeArray[i]);
                    }
                }
                heap.Sort();
            }
            return number;
        }
    }
}
 

————————————————————————————

POWER BY TRUFFER.CN

3 代码格式

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Number_Sequence
    {
        /// 
        /// 超级阿格里数字(超级丑数)
        /// 
        /// 给定的质数数组
        /// 
        /// 
        public static int SuperUgly_Number(int[] primeArray, int n)
        {
            int size = primeArray.Length;
            if (n <= 0)
            {
                return -1;
            }
            if (n == 1)
            {
                return 1;
            }
            List heap = new List();

            for (int i = 0; i < size; i++)
            {
                heap.Add(primeArray[i]);
            }

            int count = 1;
            int number = 0;
            heap.Sort();

            while (count < n)
            {
                number = heap[0];
                heap.RemoveAt(0);
                if (number != heap[0])
                {
                    count++;
                    for (int i = 0; i < size; i++)
                    {
                        heap.Add(number * primeArray[i]);
                    }
                }
                heap.Sort();
            }
            return number;
        }
    }
}

你可能感兴趣的:(C#算法演义,Algorithm,Recipes,c#,算法)