杭电ACM1014

Uniform Generation


题目:

公式:seed(x+1) = [seed(x) + STEP] % MOD;如果STEP=3,MOD=5,那么seed的值为以3,1,4,2,0为一组循环,即[0,MOD-1],这种称为“Good Choice”;如果STEP=15,MOD=20,那么seed的值为以15,10,5,0为一组循环,不满足[0,MOD-1],所以这种称为“Bad Choice”。

     input:3 5

     output: 3 5 Good Choice

                     15 20 Bad Choice

                     63923   99999 Good Choice   (注意格式,这里无)


代码1:

#include<iostream>
#include<memory.h>
#include<cstdio>

using namespace std;

int main(){
    int step,mod,seed;
    bool pd[1000];
    while(cin>>step>>mod){
        printf("%10d%10d    ",step,mod);
        memset(pd,0,1000); //把pd中前1000个数用0代替,并返回到pd
        seed=(0+step)%mod;
        pd[seed]=1;
        while(seed!=0){
            seed=(seed+step)%mod;
            pd[seed]=1;
        }
        bool flag=1;
        for(int i=0;i<mod;i++){
            if(pd[i]==0){
                flag=0;
                break;
            }
        }
        if(flag) cout<<"Good Choice"<<endl;
        else cout<<"Bad Choice"<<endl;
        cout<<endl;
    }
    return 0;
}


代码2:

这题也是用来判断两个数得最大公约数是不是1,即这两个数是互质的。

#include<iostream>
#include<stdio.h>
using namespace std;

int zs(int step,int mod){  //求最大公约数
    if(mod==0)
        return step;
    else
        zs(mod,step%mod);
}
int main(){
    int step,mod;
    while(cin>>step>>mod){
        if(zs(step,mod)==1){
            printf("%10d%10d    Good Choice\n",step,mod);
        }
        else{
            printf("%10d%10d    Bad Choice\n",step,mod);
        }
        cout<<endl;
    }
    return 0;
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值