这个代码在C中看起来怎么样?我确实试过在javascript上做,但不知道如何循环它。 确定用户输入的数字是否为素数的程序 数。程序将继续询问数字,直到用户输入 值小于2.该程序必须使用模块实现。 例如:
Enter a number: 4
4 is not a prime number
Enter a number: 5
5 is a prime number
Enter a number: 0
int main()
{
int n, i = 3, count, c;
printf("Enter the number of prime numbers required\n");
scanf("%d",&n);
if ( n >= 1 )
{
printf("First %d prime numbers are :\n",n);
printf("2\n");
}
for ( count = 2 ; count <= n ; )
{
for ( c = 2 ; c <= i - 1 ; c++ )
{
if ( i%c == 0 )
break;
}
if ( c == i )
{
printf("%d\n",i);
count++;
}
i++;
}
return 0;
}
答案 0 :(得分:1)
这是一般的非优化算法:
int n;
do
{
printf("Enter the number: ");
scanf("%d",&n);
if (n >= 2) // check if number is prime, general algorithm
{
bool prime = true;
for (int j=2; j<n; j++)
if ( (n%j) == 0) // n is divided by j without modulus - is it not prime
{
prime = false;
break;
}
if (prime)
printf("prime\n");
else
printf("is not prime\n");
}
} while (n >= 2);
这里是更新版本,它使用了所有偶数都不是素数的事实,并且没有理由检查更大的数字N / 2
int n;
do
{
printf("Enter the number: ");
scanf("%d",&n);
if (n >= 2) // check if number is prime, general algorithm
{
bool prime = true; // for n=2 prime is true
if (n > 2)
prime = n & 1; // number at least odd
if (prime)
{
// starts with 3
for (int j=3; j<=(n>>1); j+=2)
if ( (n%j) == 0) // n is divided by j without modulus - is it not prime
{
prime = false;
break;
}
}
if (prime)
printf("prime\n");
else
printf("is not prime\n");
}
} while (n >= 2);
答案 1 :(得分:0)
实际上只需检查sqrt(n)即可使代码运行得更快。
你可以查看this帖子了解其他有用的方法。