【定义1】 设a,b 是两个整数,且b!=0,则存在唯一的整数q和r,使
a=q*b+r ( 0 <= r < |b| )
这个式子叫带余除法,并记余数 r = a mod b 。
例如:5 mod 2 = 1,-14 mod 5 =3
【整除的应用】
例1:整除的尾数 (HDU 2099) 点击打开链接
Problem Description
一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢?
Input
输入数据有若干组,每组数据包含二个整数a,b(0<a<10000, 10<b<100),若遇到0 0则处理结束。
Output
对应每组数据,将满足条件的所有尾数在一行内输出,格式见样本输出。同组数据的输出,其每个尾数之间空一格,行末没有空格。
Sample Input
200 40 1992 95 0 0
Sample Output
00 40 80 15
【分析】
此题属于入门级的题。从0~99进行枚举后两位,再加上整数a*100后对b取余即可。
【代码】
#include <stdio.h>
#include <math.h>
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a==0&&b==0)
break;
int i,count=0;
a*=100;
for(i=0;i<=99;i++)
{
if((a+i)%b==0)
{
count++;
if(count>1)
printf(" %02d",i); /* %02d 表示数字宽度为2,宽度不够在坐边补0 例如:3 输出 03 */
else
printf("%02d",i);
}
}
printf("\n");
}
return 0;
}
例2:斐波那契的整除 (NEFU 115)点击打开链接
description |
<span style="font-size:18px;">已知斐波那契数列有如下递归定义,f(1)=1,f(2)=1, 且n&gt;=3,f(n)=f(n-1)+f(n-2),它的前几项可以表示为1, 1,2 ,3 ,5 ,8,13,21,34…,现在的问题是想知道f(n)的值是否能被3和4整除,你知道吗?</span> |
input |
<span style="font-size:18px;">输入数据有若干组,每组数据包含一个整数n(1&lt; n &lt;1000000000)。</span> |
output |
<span style="font-size:18px;">对应每组数据n,若 f(n)能被3整除,则输出“3”; 若f(n) 能被4整除,则输出“4”;如果能被12整除,输出“YES”;否则输出“NO”。</span> |
sample_input |
<span style="font-size:18px;">4 6 7 12</span> |
sample_output |
<span style="font-size:18px;">3 4 NO YES</span> |
这道题的数据量很大,如果直接计算会溢出,考虑是否存在一定的规律性。不难发现:fn能被3整除,当且仅当n可以被4整除;fn能被4整除,当且仅当n可以被6整除;所以:fn能被12整除,当且仅当n可以被12(4和6的最小公倍数)整除;
【代码】
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n%12==0)
printf("YES\n");
else if(n%4==0)
printf("3\n");
else if(n%6==0)
printf("4\n");
else
printf("NO\n");
}
return 0;
}