zoukankan      html  css  js  c++  java
  • hdu1014Uniform Generator

    1.使用暴力穷举法:注意条件判断

    代码如下:

    #include<stdio.h>
    #include<string.h>
    bool m[100001];
    int main()
    {
     int mod,step,seed,num;
     while(scanf("%d %d",&step,&mod)!=EOF)
     {
      memset(m,0,sizeof(m));seed=0;num = 0;
      while(!(m[seed%mod])){
       m[seed%mod]=1;seed=(seed+step)%mod;num++;
      }
      if(num==mod)
       printf("%10d%10d    Good Choice\n\n",step,mod);
      else
       printf("%10d%10d    Bad Choice\n\n",step,mod);

     }
    }

    15ms 104k

    2.在网上看得资料:

    简单证明:(不知正确与否,网上提交成功了)
    令 f(x) = seed(x) + step ;
    那么seed 的序列 就是 a=f(x) 的模MOD 加法群。
    因为题中要求这个加法群的大小 | <a> | = MOD。
    所以 a == 1 (mod MOD ).
    即( seed(x) + STEP ) == 1 (mod MOD).
    又因为seed(x) 必定含有0,
    所以 STEP == 1 (mod MOD ).
    即 STEP 和 MOD 互质

    所以可以编写代码如下:

    #include<stdio.h>
    int gcd(int n,int m)
    {
     if(m==0)
      return n;
     return gcd(m,n%m);
    }
    int main()
    {
     int step,mod;

     while(scanf("%d %d",&step,&mod)!=EOF)
     {
      if(gcd(step,mod)==1)
       printf("%10d%10d    Good Choice\n\n",step,mod);
      else
       printf("%10d%10d    Bad Choice\n\n",step,mod);

     }
    }

    0ms 4k

  • 相关阅读:
    超神头文件
    世界上还有比二分更容易错的算法吗?
    【POJ 1734】Sightseeing trip
    P1303 A*B Problem
    P1601 A+B Problem(高精)
    P1051 谁拿了最多奖学金
    【P1025】数的划分
    P1005 矩阵取数游戏
    P1006 传纸条
    邮票问题
  • 原文地址:https://www.cnblogs.com/pandy/p/1319045.html
Copyright © 2011-2022 走看看