马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
这段代码实现了你想要的功能。
|