hd1004 Uniform Generator




Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 13326    Accepted Submission(s): 5240




Problem Description
Computer simulations often require random numbers. One way to generate pseudo-random numbers is via a function of the form


seed(x+1) = [seed(x) + STEP] % MOD


where '%' is the modulus operator. 


Such a function will generate pseudo-random numbers (seed) between 0 and MOD-1. One problem with functions of this form is that they will always generate the same pattern over and over. In order to minimize this effect, selecting the STEP and MOD values carefully can result in a uniform distribution of all values between (and including) 0 and MOD-1. 


For example, if STEP = 3 and MOD = 5, the function will generate the series of pseudo-random numbers 0, 3, 1, 4, 2 in a repeating cycle. In this example, all of the numbers between and including 0 and MOD-1 will be generated every MOD iterations of the function. Note that by the nature of the function to generate the same seed(x+1) every time seed(x) occurs means that if a function will generate all the numbers between 0 and MOD-1, it will generate pseudo-random numbers uniformly with every MOD iterations. 


If STEP = 15 and MOD = 20, the function generates the series 0, 15, 10, 5 (or any other repeating series if the initial seed is other than 0). This is a poor selection of STEP and MOD because no initial seed will generate all of the numbers from 0 and MOD-1. 


Your program will determine if choices of STEP and MOD will generate a uniform distribution of pseudo-random numbers. 
 


Input
Each line of input will contain a pair of integers for STEP and MOD in that order (1 <= STEP, MOD <= 100000).
 


Output
For each line of input, your program should print the STEP value right- justified in columns 1 through 10, the MOD value right-justified in columns 11 through 20 and either "Good Choice" or "Bad Choice" left-justified starting in column 25. The "Good Choice" message should be printed when the selection of STEP and MOD will generate all the numbers between and including 0 and MOD-1 when MOD numbers are generated. Otherwise, your program should print the message "Bad Choice". After each output test set, your program should print exactly one blank line.
 


Sample Input
3 5
15 20
63923 99999
 


Sample Output
         3         5    Good Choice


        15        20    Bad Choice


     63923     99999    Good Choice
 


Source

South Central USA 1996

解:

1. s与m是否互质

2. 主要是格式控制

#include <stdio.h>
int gcd(int a, int b)
{
	if(b>a)
	{
		a=a^b;
		b=a^b;
		a=a^b;
	}
	int c = a % b;
	while(c!=0)
	{
		a = b;
		b = c;
		c = a % b;
	}
	return b;
}

int main()
{
	int s,m;
	while(~scanf("%d %d",&s,&m))
	{
		if(gcd(s,m)!=1)
		printf("%10d%10d    Bad Choice\n\n",s,m);
		else
			printf("%10d%10d    Good Choice\n\n",s,m);
	}
	return 0;
}

1. 求gcd

int gcd(int a, int b)

{return b==0?x:gcd(b,a%b);}

2. while中

gcd(s,m)==1?printf... : printf...;

3. 这样代码会更简洁点



转载于:https://my.oschina.net/vintnee/blog/640453

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
统一抽样(uniform sampling)是一种从特定的总体或数据集中随机选择样本的方法。该方法的目的是确保每个样本被选择的概率相等,从而避免样本选择的偏差。 在统一抽样中,样本的选择是完全随机的,没有任何先验条件或偏好。每个个体或数据点都有相等的机会被选中作为样本,确保了样本的代表性和可靠性。这种抽样方法常用于调查研究、统计推断和实验设计等领域。 统一抽样有多种实施方式。其中一种常见的方法是简单随机抽样,即从总体或数据集中以完全随机的方式选择样本。另一种是系统抽样,通过在总体或数据集中选择一个起始点,然后以固定的间隔选择下一个样本,直到达到所需的样本规模。 统一抽样的优点是能够减少样本选择的偏差,提供有关总体或数据集的可靠估计。它还便于在统计推断中进行数学分析,可以使用数理统计方法对得到的样本数据进行推断总体参数的估计。 然而,统一抽样也有一些限制。由于是完全随机选择样本,可能会导致一些不太常见的个体在样本中出现频率较低,导致样本可能无法完全代表总体的某些特征。在应用统一抽样时,需要权衡样本大小、总体特征和研究目的,以确保抽样结果的可靠性和效果。 总而言之,统一抽样是一种从总体或数据集中进行随机选择样本的方法,确保每个样本被选择的概率相等。它是一种常用的抽样方法,在调查研究和统计推断中具有广泛应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值