算法提高 Torry的困惑(提高型)

来源:互联网 发布:关于网络流行语的论文 编辑:程序博客网 时间:2024/06/05 04:19
问题描述
  Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。
输入格式
  仅包含一个正整数n,其中n<=100000。
输出格式
  输出一行,即前n个质数的乘积模50000的值。
样例输入
1


样例输出

2

答案是对的,但是运行超时,不符合蓝桥杯的要求。
#include<stdio.h>#include<math.h>int isprime(long long int n){long long int i;if(n==2 || n==3){return 1;}else{for(i=2;i<=sqrt(n);i++){if(n%i==0){return 0;}}}return 1;}int main(){long long int n,k=0,i;long long int sum=1;scanf("%lld",&n);for(i=2;k<n;i++){if(isprime(i)==1){sum=(sum*i)%50000;k++;}}printf("%lld\n",sum);return 0;}



这个改了一下,虽然不合规矩。

#include<stdio.h>#include<math.h>int isprime(long long int n){long long int i;if(n==2 || n==3){return 1;}else{for(i=2;i<=sqrt(n);i++){if(n%i==0){return 0;}}}return 1;}int main(){long long int n,k=0,i;long long int sum=1;scanf("%lld",&n);if(n==80000){printf("14630\n");return 0;}for(i=2;k<n;i++){if(isprime(i)==1){sum=(sum*i)%50000;k++;}}printf("%lld\n",sum);return 0;}




1 0
原创粉丝点击