|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好,我最近做一题要求生成1000000组,每组2个,范围为1到2的31次方的随机数,统计其中互质的组数,然后除以总组数。题目说输出结果约为60.914000%,我写的代码如下,结果总是差很远,我检查了一下,是生成随机数那里出了问题,我看我生成的随机数,最大也就30000多,和我的区间差了很远,请问是为什么?应该怎么改才行呢,谢谢大家了。- #include <iostream>
- #include <algorithm>
- #include <time.h>
- using namespace std;
- bool coprime(int m, int n);
- int main()
- {
- float i;
- float j = 0;
- long long max = pow(2, 31);
- int min = 1;
- for (i = 1; i < 1000000; i++){
- srand(time(NULL));
- long long num1 = rand() % (max)+min;
- long long num2 = rand() % (max)+min;
- if (coprime(num1, num2))
- {
- j++;
- }
- }
- float c = j / 1000000;
- cout << c * 100 << "%" << endl;
- return 0;
- }
- bool coprime(int m, int n)
- {
- int num1 = m;
- int num2 = n;
- int num3;
- if (num1 == num2)
- {
- return false;
- }
- else if (num1 < num2)
- {
- num1 ^= num2;
- num2 ^= num1;
- num1 ^= num2;
- }
- else
- {
- while ((num3 = num1 % num2) != 0)
- {
- num1 = num2;
- num2 = num3;
- }
- if (num2 == 1)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
复制代码 |
|