ACM知识竞赛 之 SDUT3032 神奇的树(水~~)

神奇的树

Time Limit: 1000MS Memory limit: 65536K

题目描述

SDUT有一颗神奇的苹果树。假如某天早上这树上有x个苹果,那么这树这一天会再结出x个苹果来,也就是说到了晚上会有2*x个苹果,到了深夜,会有专人人来摘苹果,而摘苹果的人总会使苹果数剩下当前数量对m的余数,也就是说假如当前数量为a,那么第二天早上会剩下a%m个苹果。也许聪明的你已经发现了,有可能从某一天开始,这棵树上就再也没有苹果了。那么给你第一天早上的苹果数,请你判断一下是否存在这一天,从这一天开始就再也没有苹果了。如果一直存在的话输出Yes,否则输出No。
 

输入

  多组测试数据。每组测试数据都是一行两个整数,x和m。x表示第一天早上的
苹果树,m表示余数。1<=x,m<=10^5.

输出

 每组测试数据输出单独一行,Yes或No。

示例输入

1 5
3 6

示例输出

No
Yes

提示

今天比赛的第一题,题意很简单,只要标记一下每次取余的结果,再次出现说明出现了一个环,则永远不可能取光。。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <stdlib.h>
#include <queue>
#include <algorithm>
using namespace std;
int a[100001];
int main()
{
    int x,m;
    while(cin>>x>>m)
    {
        memset(a,0,sizeof(a));    //用来记录每次取余的结果是否出现过
        int flag=1;
        x=x*2;
        while(1)
        {
            if(x%m==0)          //表示取尽苹果,直接输出
            {
                flag=0;
                break;
            }
            else
            {
                x=x%m;   
                if(a[x])          //a[x]为1,表示此时x已出现过,出现了环
                {
                    flag=1;
                    break;
                }
                else a[x]=1;    //标记已出现的余数
            }
            x=x*2;
        }
        if(flag)
        cout<<"No"<<endl;
        else cout<<"Yes"<<endl;
    }
    return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值