数论 特殊的数

一、丑数

定义:丑数是指其质因子只包含2,3,5的数,如1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30

判断方法:先对2整除,不能整除时,对3整除,不能整除时,再对5整除,最后数为1时则为丑数

代码:

    while (num % 2 == 0)
        num /= 2;

    while (num % 3 == 0)
        num /= 3;

    while (num % 5 == 0)
        num /= 5;

    if(num == 1)
        cout<

二、素数

定义:大于1的自然数中,除1和本身外,无其他的因子、

判断方法:查找是否有其他因子

代码:

int isprime(int data){
    for(int i=2; i<=sqrt(data); ++i){
	if(data%i==0){
	    return 0;
	}
    }
    return 1;
}

判断素数还有更高效的方法:素数筛法

三、数根(Digital Root)

定义:正整数的数根即是该整数各个数位数字之和。设该数为n,该数数根为F[n],如果F(n)只含一个数字,则它的数根为它本身,否则n的数字根等于F(n)的数根。

eg.求 987的数根
第一步 9+8+7=15
第二步1+5=6
所以987的数根为6

求数根的公式:F[n] = 1 + ((num - 1) % 9)

四、对称平方数

定义:判断一个数的平方是否为回文数(左右对称,如12321即为回文数)。

解法:数位拆解后存入字符数组a,再反向存入字符数组b,然后判断a,b是否相等,用strcmp()即可。注:字符数组末尾加0,代表数组结束符。

五、最大公约数(GCD)

定义:求同时满足a%c==0 && b%c==0的最大正整数c,即求同时能整除a和b的最大正整数c。

解法:欧几里得算法

若a,b全为0则它们的最大公约数不存在,若a、b其中有一个为0,则二者最大公约数为不为0的那个,若a、b均不为0,则使     temp = b; b = a % b;   a = temp;  重复此步骤,即可的答案。

六、最小公倍数(LCM)

定义:求最小正整数c,使c%a == 0; && c%b == 0;

解法:二者的乘积再除以它们的最大公约数。

 

 

你可能感兴趣的:(C基础总结)