hdu 1014

我:题都看不懂

路人甲:这是随机数分配题目

路人乙:这是求生成元,求mod N的生成元,即生成元与N互质

路人丙:这是根据给出的递推公式算一下 0~ mod-1之间的数是否都有出现过,如果都出现了,那就是Good 否则bad
路人丁:这是求step和mod如果GCD(最大公约数位1)那么就是Good Choice,否则为Bad Choice

路人甲、路人丙:

#include <iostream>
using namespace std;

const long int MAX_MOD = 100000;
bool gened[MAX_MOD] = {false};//数是否产生

void doRandomTest(int step,int mod)
{
    int seed = 0,tmp,i;//初始种子值为零
    for(i=0;i<mod;++i)
    {//刚开始数都未产生
        gened[i] = false;
    }
    gened[0] = true;//第一个产生的是零
    do
    {
        tmp = (seed+step)%mod;
        gened[tmp] = true;//第tmp个数已经产生了
        seed = tmp;//更新种子数
    }while(seed!=0);
    for(i=0;i<mod;++i)
    {
        if(gened[i]==false)//有数没有产生出来
            break;
    }
    if(i==mod)
    {
        printf("%10d%10d    Good Choice
",step,mod);
    }
    else
        printf("%10d%10d    Bad Choice
",step,mod);
    cout<<endl;
}

int main(int argc,char* argv[])
{
    int step,mod,i;
    while(cin>>step>>mod)
    {
        doRandomTest(step,mod);
    }
    return 0;
}
路人乙、路人丁:

#include<bits/stdc++.h>
using namespace std;

int main() {
    int n,m;
    while(cin>>n>>m) {
        if(__gcd(n,m)==1)
        printf("%10d%10d    Good Choice

",n,m);
        else
        printf("%10d%10d    Bad Choice

",n,m);
    }
    return 0;
}
闭嘴



原文地址:https://www.cnblogs.com/qie-wei/p/10160232.html