需要帮助在{c}中填写素数行

时间:2015-11-06 21:43:34

标签: c loops while-loop do-while

我需要在{c}制作一个程序,它会给我输入数字的素数(例如用户输入50来回写229) 所以,我在制作循环时陷入困境。 我要为行[100]定义行[0] = 2,行[1] = 3然后我使i = 4并尝试创建一个循环,对于数字i,我将每个数字与数字i分开在行中(因为我知道的是素数)并得到模块(0之后的数字,不确定它是如何在英语上说的),然后如果它们都有模块!= 0那么我知道它是素数而且我想把它添加到行中。

那么有人可以帮助我写这一行吗?非常感谢提前:))

#include <stdio.h>
int main ()
{
  int i,numb=4,position,temp,temp1,row[100];
  printf(" enter position (1-100)\n");
  scanf("%d",&position);
  if (position>100||position<0 )
  {
       printf("error,enter position between 1 and 100"); 
       return(0);
   }
   row[0]=2;
   row[1]=3;
   i=2;
   do
   {
          temp=numb%2;                       
          temp1=numb%3;
          if (temp!=0 && temp1!=0)
          {
              row[i]=numb;
             i++;
           }
          numb++;
      }
      while (i<100);
      printf("%d. prime number is %d",position,row[position]);
      return 0;
}

好的,所以我需要更改我要求模块的部分,从机智2和3分配,要求模块从当时行中的所有数字中删除。谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

#include <stdio.h>

#define MAX_N 100

int main(void){
    int i, odd, temp, position, n = 0, row[MAX_N];

    row[n++]=2;
    row[n++]=3;
    for(odd = 5; n < MAX_N; odd += 2){
        int is_prime = 1;//true
        for(i = 1; i < n; ++i){
            temp = row[i];
            if(temp * temp > odd)
                break;
            if(odd % temp == 0){
                is_prime = 0;//false
                break;
            }
        }
        if(is_prime)
            row[n++] = odd;
    }

    printf(" enter position (1-%d)\n", MAX_N);
    scanf("%d", &position);
    if (position > 100 || position < 1){
        printf("error,enter position between 1 and %d\n", MAX_N); 
        return 0;
    }
    printf("%d. prime number is %d", position, row[position - 1]);

    return 0;
}