#include<stdio.h>
int main()
{
int i,j;int f=1;
for(i = 2;i <= 100;i++)
{
for(j = 2;j <= i-1;j++)
{
if(i%j == 0)
{f=0;
break;
}
}
if(f==1)
{
printf("%d是素数\n",i);
}
}
return 0;
}
为什么只能输出2和3,应该怎么改,像保留标量
for循环内要加上f=1; 否则一旦执行了f=0后,f值就永远是0了
#include<stdio.h>
int main()
{
int i,j;int f=1;
for(i = 2;i <= 100;i++)
{
f=1;
for(j = 2;j <= i-1;j++)
{
if(i%j == 0)
{f=0;
break;
}
}
if(f==1)
{
printf("%d是素数\n",i);
}
}
return 0;
}
**
问题解答:
问题:求解1~100内的所有素数,为什么代码只输出了2和3?
思路:判断素数的方法是遍历除以2到sqrt(n)之间的所有正整数,如果都不能整除则为素数。可以使用for循环,遍历1~100内的所有数,判断是否为素数,是则添加到列表中。
代码实现:
#include <stdio.h>
#include <math.h>
int is_prime(int n) { // 判断是否为素数函数
int i;
if (n <= 1) {
return 0;
}
for (i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int i;
int primes[100];
int count = 0;
for (i = 1; i <= 100; i++) { // 遍历1~100内的所有数
if (is_prime(i)) { // 判断是否为素数
primes[count++] = i; // 添加到列表中
}
}
for (i = 0; i < count; i++) { // 输出素数列表
printf("%d ", primes[i]);
}
return 0;
}
这段代码使用了is_prime
函数来判断素数,并使用数组primes
来保存素数列表,最后循环输出即可。