我怎么能用C语言编写一个程序,在不使用任何条件(仅使用循环!)的情况下,不给出给定范围的所有素数。我尝试了许多不同的选择,但其中一个都不正常。 例如:
我已经尝试过的东西:
#include <stdlib.h>
#include <stdio.h>
#define UNTIL 1000
#define NOT_INCLUDED 2
int main()
{
int prime =1, i =1,factor=0;
for(prime=1;UNTIL>=prime ;prime++)
{
for( i=1;i<=prime;i++)
{
for(;prime%i==0;)
{
factor++;
}
}
for(;factor==2;factor=0)
{
printf("prime number: %d \n",prime);
}
}
return 0;
}
答案 0 :(得分:2)
接受挑战:没有任何条件,隐藏或其他条件
#include <stdio.h>
#include <stdlib.h> // atoi
int main(void) {
const char *p = "2 3 5 7 11 13 17 19 23 29\0\0\0\0\0"; /* extend at will */
for (;;) {
p += printf("%d ", atoi(p));
fflush(stdout);
int z = 42 / *p;
(void)z; /* unused warning */
}
return 0;
}
查看在ideone.com上运行的代码
答案 1 :(得分:0)
要检查N
是否为质数,请遍历从2
到N
的所有数字,以查看N
是否可被其他数字整除。每个数字都可以被1
整除,因此在测试素数时,请针对2
进行测试。
示例
#include <stdio.h>
int is_prime(int N)
{
//0 and 1 are not primes
if (N < 2)
return 0;
//start testing against 2
for(int i = 2; i < N; i++)
if(N % i == 0)
return 0; //not a prime
return 1; //prime
}
int main()
{
printf("Primes from 0 to 1000:\n");
for(int i = 0; i < 1000; i++)
if(is_prime(i))
printf("%d, ", i);
printf("\n");
return 0;
}
您可以通过将范围更改为N/2
来优化循环。
for(int i = 2; i <= N/2; i++)
if(N % i == 0)
return 0; //not a prime
return 1;//prime