|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
原题为输出第n个素数
- #include<stdio.h>
- #include<math.h>
- int main()
- {
- int n, i, j, k = 1;
- int x, array[500000];//x判断素数标记,array储存素数
- int a;//储存开根号的值
- scanf("%d",&n);
- array[0] = 2;
- if(n <= 500000 && n >= 2)
- {
- for(i = 3; i <= 500000 ; i+=2)
- {
- x = 0;
- a = sqrt(i);
- for(j = 2; j <= a; j++)
- {
- if(i % j == 0)
- {
- x = 1;
- }
- }
- if(x!=1)
- {
- array[k++] = i;
- }
- }
- }
- for(i = 0; i < n; i++)
- {
- printf("%d, %d\n", array[i], i+1);
- }
- return 0;
- }
复制代码
上面是我的代码,for循环是我用来看哪里输入错了,图中是我n输入500000,然后它for循环输出的数在i循环到比较大时,所输出的值就错了,想问一下是哪里出了问题,
然后还想问一下,算法还能再节省一点时间吗?
- #include <stdio.h>
- #include <stdbool.h>
- bool is_prime(int);
- int main(void){
- int n, i;
- int p = 0;
- printf("how many prime you want know: ");
- scanf("%d", &n);
- int array[n];
- array[0] = 2;
- for (i = 3; n > 0; i += 2){
- if (is_prime(i)){
- n--;
- array[++p] = i;
- }
- }
-
- for (int j = 0; j < sizeof(array)/sizeof(array[0]); j++)
- printf("the NO.%d prime is: %d\n", j+1, array[j]);
- return 0;
- }
- bool is_prime(int num){
- if (num <= 2)
- return true;
- for (int i = 2; i * i <= num; i++)
- if (num % i == 0)
- return false;
- return true;
- }
复制代码
这段代码实现了你想要的功能。
|
-
|