打印不超过 n 的质数
Printing prime numbers up to n
我写了一些代码来要求用户输入 n,然后打印直到 n 的质数。然而,当我使用它时,即使用 10,它只打印非质数
/* Asks for the amount of prime numbers you would like to print, then prints them */
#include <stdio.h>
int main(void)
{
int n, i, j, check;
printf("How many prime numbers would you like to print? ");
scanf("%d", &n);
for (i = 2; i <= n; i++) {
check = 0;
for (j = 2; j < i ; j++) {
if (i % j == 0) {
check = 1;
if (check == 1) {
printf("%d\n", i);
}
}
}
}
return 0;
}
How many prime numbers would you like to print? 10
4
6
6
8
8
9
10
10
我已经尝试了所有方法,但我认为我遗漏了一些非常微不足道的东西!
应该是这样的:
for (i = 2; i <= n; i++)
{
check = 0;
for (j = 2; j < i ; j++)
{
if (i % j == 0)
{
check = 1;
break;
}
}
if (check == 0)
{
printf("%d\n", i);
}
}
此外,在内部循环中,您不必将数字除以 j < i
。您不必超出 i/2
.
正如 Weather Vane 所说,mod 运算符 %
returns 0 如果 i
可以被 j
整除,如果这是真的那么数字是 不是 素数。你的条件语句是倒退的。
#include <stdio.h>
int main(void)
{
int n, i, j, check;
printf("How many prime numbers would you like to print? ");
scanf("%d", &n);
for (i = 2; i <= n; i++)
{
check = 0;
for (j = 2; j < i ; j++)
{
if (i % j == 0)
{
check = 1;
break;
}
}
if (check == 0)
{
printf("%d\n", i);
}
}
return 0;
}
How many prime numbers would you like to print? 10
2
3
5
7
几个问题。
首先,当你设置check = 1
时,这意味着i
平均分配,所以n
是不是素数,所以你应该'打印它。您应该在 check == 0
.
时打印数字
其次,您每次都通过内部循环进行打印。您应该在循环结束时测试 check
,以确保 none 的数字除以它。
作为一项改进,一旦找到一个整除数,就无需继续检查。这样一设置check = 1
.
就可以跳出内循环
#include <stdio.h>
int main(void)
{
int n, i, j, check;
printf("How many prime numbers would you like to print? ");
scanf("%d", &n);
for (i = 2; i <= n; i++) {
check = 0;
for (j = 2; j < i ; j++) {
if (i % j == 0) {
check = 1;
break;
}
}
if (check == 0) {
printf("%d\n", i);
}
}
return 0;
}
尝试查看此代码
#include <stdio.h>
int IsPrime(int num)
{
int i = 2;
for (i = 2; i < num; i++) if (num % i == 0) return 0;
return 1;
}
int main(void)
{
int n, i;
char *nStr = (char*)malloc(10);
printf("How many prime numbers would you like to print? ");
fgets(nStr, 9, stdin);
n = atoi(nStr);
for (i = 1; i <= n; i++) if (IsPrime(i)) printf("%d\n", i);
getchar();
return 0;
}
关于您的代码,只有当支票仍为 0 时,您才应该打印数字。
我写了一些代码来要求用户输入 n,然后打印直到 n 的质数。然而,当我使用它时,即使用 10,它只打印非质数
/* Asks for the amount of prime numbers you would like to print, then prints them */
#include <stdio.h>
int main(void)
{
int n, i, j, check;
printf("How many prime numbers would you like to print? ");
scanf("%d", &n);
for (i = 2; i <= n; i++) {
check = 0;
for (j = 2; j < i ; j++) {
if (i % j == 0) {
check = 1;
if (check == 1) {
printf("%d\n", i);
}
}
}
}
return 0;
}
How many prime numbers would you like to print? 10
4
6
6
8
8
9
10
10
我已经尝试了所有方法,但我认为我遗漏了一些非常微不足道的东西!
应该是这样的:
for (i = 2; i <= n; i++)
{
check = 0;
for (j = 2; j < i ; j++)
{
if (i % j == 0)
{
check = 1;
break;
}
}
if (check == 0)
{
printf("%d\n", i);
}
}
此外,在内部循环中,您不必将数字除以 j < i
。您不必超出 i/2
.
正如 Weather Vane 所说,mod 运算符 %
returns 0 如果 i
可以被 j
整除,如果这是真的那么数字是 不是 素数。你的条件语句是倒退的。
#include <stdio.h>
int main(void)
{
int n, i, j, check;
printf("How many prime numbers would you like to print? ");
scanf("%d", &n);
for (i = 2; i <= n; i++)
{
check = 0;
for (j = 2; j < i ; j++)
{
if (i % j == 0)
{
check = 1;
break;
}
}
if (check == 0)
{
printf("%d\n", i);
}
}
return 0;
}
How many prime numbers would you like to print? 10
2
3
5
7
几个问题。
首先,当你设置check = 1
时,这意味着i
平均分配,所以n
是不是素数,所以你应该'打印它。您应该在 check == 0
.
其次,您每次都通过内部循环进行打印。您应该在循环结束时测试 check
,以确保 none 的数字除以它。
作为一项改进,一旦找到一个整除数,就无需继续检查。这样一设置check = 1
.
#include <stdio.h>
int main(void)
{
int n, i, j, check;
printf("How many prime numbers would you like to print? ");
scanf("%d", &n);
for (i = 2; i <= n; i++) {
check = 0;
for (j = 2; j < i ; j++) {
if (i % j == 0) {
check = 1;
break;
}
}
if (check == 0) {
printf("%d\n", i);
}
}
return 0;
}
尝试查看此代码
#include <stdio.h>
int IsPrime(int num)
{
int i = 2;
for (i = 2; i < num; i++) if (num % i == 0) return 0;
return 1;
}
int main(void)
{
int n, i;
char *nStr = (char*)malloc(10);
printf("How many prime numbers would you like to print? ");
fgets(nStr, 9, stdin);
n = atoi(nStr);
for (i = 1; i <= n; i++) if (IsPrime(i)) printf("%d\n", i);
getchar();
return 0;
}
关于您的代码,只有当支票仍为 0 时,您才应该打印数字。