这段代码出了什么问题以打印范围内的素数

时间:2018-12-04 16:02:47

标签: c

//to print prime number within range
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main(){
    int i,upper,n,k,l,prime;
    int primes[300];
    primes[0]=2;
    printf("enter the upper limit:");
    scanf("%d",&upper);
    l=0;
    for(i=5;i=upper;i+=2){
        prime=0;
        for(k=0;k=l;k++){
            if(i%primes[k]==0){// if not prime set prime=0
                prime==1;
                break;
}
}
    if (prime==0){
        l++;
        primes[l]=i;//else store as array
}
}
for (n=0;n=l;n++){
    printf("%d",primes[n]);}//print the elements in the array
return 0;
// end of the function}

为什么不起作用?在python中,当我使用列表时它可以正常工作。但是在这里它甚至没有超出输入。我犯了什么错误。我也已经编译了

1 个答案:

答案 0 :(得分:0)

  1. for(i=5;i=upper;i+=2){行应为for (i = 3; i < upper; i += 2) {
  2. for(k=0;k=l;k++){行应为for (k = 2; k != i; ++k)
  3. if(i%primes[k]==0行应为if(i%k == 0)

以下code可以工作:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define N 300

int main(){
  int i,upper,k,l;
  int primes[N];
  primes[0] = 2;
  printf("enter the upper limit:");
  scanf("%d", &upper);
  if (upper > N)
    return -1;
  l = 0;
  for (i = 3; i < upper; i += 2) {
    for (k = 2; k != i; ++k)
      if(i%k == 0)
        break;
    if (k == i)
      primes[l++] = i;
  }
  for (i = 0; i != l; ++i)
    printf("%d\n", primes[i]);
  return 0;
}