任务1:使用蒙特卡洛方法计算圆周率
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int total = 10000; // 总点数
int circle_count = 0; // 圆内点数计数器
double x, y;
double pi;
srand(time(NULL)); // 初始化随机数生成器
for(int i = 0; i < total; ++i) {
x = (double)rand() / RAND_MAX; // 生成0到1之间的随机数
y = (double)rand() / RAND_MAX; // 同上
if ((x - 0.5) * (x - 0.5) + (y - 0.5) * (y - 0.5) <= 0.25) {
// 如果点在圆内
circle_count++;
}
}
pi = 4.0 * circle_count / total; // 计算圆周率的近似值
printf("估计的圆周率值为:%f\n", pi);
return 0;
}
任务2:求1000以内最大的20个素数之和
#include <stdio.h>
int is_prime(int number) {
if (number <= 1) return 0;
if (number % 2 == 0 && number > 2) return 0;
for(int i = 3; i * i <= number; i += 2) {
if (number % i == 0)
return 0;
}
return 1;
}
int main() {
int count = 0;
int sum = 0;
for(int i = 1000; i > 1 && count < 20; --i) {
if (is_prime(i)) {
sum += i;
count++;
}
}
printf("1000以内最大的20个素数之和为:%d\n", sum);
return 0;
}
任务3:验证1/997的循环节
#include <stdio.h>
int main() {
int remainder = 1; // 初始余数
int position = 0; // 位置计数器
printf("0.");
while (position < 166) { // 仅输出166位
remainder *= 10; // 余数扩大10倍
printf("%d", remainder / 997); // 输出当前商
remainder %= 997; // 更新余数
if (remainder == 0) break; // 如果余数为0,则退出循环
position++;
}
printf("\n");
if (position == 166)
printf("循环长度为166,如预期所见。\n");
else
printf("循环长度不为166位。\n");
return 0;
}