关于15-5-3分割规则的写方法

时间:2019-06-17 17:40:19

标签: algorithm

我对求职面试中问过的一个问题有想法。

问题是:

“请编写满足以下条件的函数,当用户输入该值时。该值将被除以5”,如果该值将被除以15,该函数将仅返回“该值将被除到15“,如果该值将被划分为非3个条件,系统将返回”该值将不被划分为3/5/15“

我想,我首先检查了数字是否可以除以15,然后除以5,最后除以3。但是我认为这并不那么容易。当我将整数除以15的规则时,我发现每个可以被3和5完全除的数可以被15除。

我认为,我编写了以下代码:

if (a % 15 == 0) { Console.WriteLine("the value will be divided to 15"); }
            else if (a % 5 == 0) { Console.WriteLine("the value will be divided to 5"); }
            else if (a % 3 == 0) { Console.WriteLine("the value will be divided to 3"); }
            else { Console.WriteLine("the value will be divided to nothing"); }

我认为这是关于15的除数规则的把戏,但我找不到它。

2 个答案:

答案 0 :(得分:2)

该规则有效。我们说如果存在整数n,则15将数字q除以

15q = n

我们称q见证人,是15除以n的事实。

由于我们可以将15分解为3 * 55 * 3,所以相当于说

(3*5)q = n
(5*3)q = n

如果整数乘法是关联的,则与

相同
3(5*q) = n
5(3*q) = n

3、5和q中的所有三个都是整数,这意味着5*qn被3除数的见证者,而3*q是证明n被5除。

现在,假设15个 not 不除n。这意味着没有证人q。如果3除以n,我们知道存在q这样的3q = n。我们还知道5不除q,否则将有一些p使得3*(5*p) = np成为15个做< / em>除n。如果5除n,则类似的论点成立。因此,如果您已经证明15不会除n,那么3和5中最多一个也可以除n

答案 1 :(得分:0)

有另一种解决问题的方法:计算数字的greatest common divisor (GCD)和15。这样可以减少需要执行的除法次数,以及reduces the amount of duplicated code

代码如下:

int gcd = 1;
if (a % 3 == 0) { gcd *= 3; }
if (a % 5 == 0) { gcd *= 5; }

if (gcd != 1) { Console.WriteLine("the value will be divided to " + gcd); }
else { Console.WriteLine("the value will be divided to nothing"); }

通过编写适当的GCD函数,这也可以扩展到许多主要因素。