HDU 2099 整除的尾数 NEFU 115 斐波那契的整除

【定义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&amp;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&amp;lt; n &amp;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;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值