算法提高 Torry的困惑(提高型)
- 题目描述:
1、Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。
2、输入:
仅包含一个整数n,其中n<=100000
3、 输出:
输出一行,即前n个质数模50000的值
输入样例:
1
输出样例
2
2.部分题目解释以及数学提示
1、原文“Torry只要你算出这个数模上50000的值”意思是说:n%50000(n是指原文中的“这个数”)
2、数学提示:(n1 * n2 * n3)% 50000 = ((n1 % 50000) * n2 % 50000) * n3 %50000
代码实现:
#include<stdio.h>
#include<math.h>
int Chack(int);
long long int Addition(int);
int Chack(int n)
{
long long int num = 2;
long long int k, i, sum = 1;
long long int j = 0;
while(j < n)
{
while(1)
{
k = sqrt(num);
for(i = 2; i <= k; i++)
if(num%i == 0)
break;
if(i > k)
{
sum *= num;
sum %= 50000;
num++;
break;
}
num++;
}
j++;
}
return sum;
}
int main(void)
{
long long int n;
scanf("%d", &n);
printf("%d", Chack(n));
return 0;
}
这里说明一下,我在定义变量以及数组的时候用的是long long int,其实可以不用这么大的内存去定义变量或者数组的,而且我刚刚开始学习C语言,这个程序是我练习蓝桥杯题目后不久写出来的,在执行的效率以及代码的简洁度上面还是存在一定的问题,没有太多的经验和技巧,这也是我第一次在CSDN上面写的博客,希望有错误的地方还请大家多多指正,我一定会虚心接受建议,争取下次写出来的东西能更好,谢谢大家。