过去3天,我一直在努力解决问题,但我一直在失败。
我正在尝试在C中打印从1到300的所有素数。(Dev C ++)
下面是代码
#include <stdio.h>
#include <conio.h>
main() {
// 1 - 300
register int i, j;
for (i = 1; i <= 300; i++) {
for (j = 2; j < i; j++) {
if (i % j == 0) {
break;
} else {
printf("\n%d", i);
break;
}
}
}
}
请帮助我,同时也帮助我阐明概念。 谢谢。
答案 0 :(得分:2)
您打印数字太早了。在外循环的末尾打印数字。也就是说,在内循环之后。
你可以做
for(i=1; i<=300; i++)
{
for(j=2; j<i; j++)
{
if(i%j == 0)
{
break;
}
}
if(j>=i)
{
printf("\n%d",i);
}
}
如果在内循环结束时,条件j<i
仍然成立,则由于执行了break
语句,循环被过早终止,因此该数字不是素数。
但是如果该条件为假,即j>=i
为真,则数字为质数。
您也可以在标志变量的帮助下完成此操作。
您可能不需要使用register
存储类说明符。请参阅this帖子。
并且不需要break
语句。在您发布的程序中,
if(i%j == 0)
{
break;
}
else
{
printf("\n%d",i);
break;
}
与
相同if(i%j == 0)
{
break;
}
printf("\n%d",i);
或者只是
if(i%j != 0)
{
printf("\n%d",i);
}
答案 1 :(得分:0)
这应该现在就可以完成,但是我敢肯定,有更有效的方法可以完成这项工作:
int main() {
int i, j;
char is_prime; // indicator for each number if it is a prime number
printf("2\n"); // first number in the series, and the only one witch is even
for (i = 3; i<=300; i += 2) // When I jump in 2 numbers each time, I save the check of all the even numbers, that we knows ahead that they are not prime numbers.
{
is_prime = 1; // Start with an assumption that the number is prime. If we will find out that it doesn't, we will turn this value to 0.
for (j = 3; j < i; j++)
{
if(i % j == 0)
{ // If this number fully divided by this `j` value, so it is not a prime number.
is_prime = 0; // Turn this variable to indicate that this is not a prime number.
break; // This loop is for testing the current number. Now we found out that it is not a prime number, so we can end this loop.
}
} // End of the inner loop that check if the current 'i' number is a prime number.
if (is_prime) { // If we found that the current 'i' number is a prime number (if is_prime != 0)
printf("%d\n", i); // Print the 'i' number.
}
}
return 0;
}
答案 2 :(得分:0)
对于素数最大为300的素数,Eratosthenes算法的Sieve效果很好。
答案 3 :(得分:0)
生成素数
这是实现这一目标的最简单方法
for(i=2 ; i <= n ; i++)
{
for(j=2 ; j<i ;j++)
{
if(i%j == 0)
break ;
}
if(i == j )
printf("%d\n",i);
}
答案 4 :(得分:0)
#include<stdio.h>
void main()
{
int n,i,fact,j;
printf("Enter the Number");
scanf("%d",&n);
printf("Prime Numbers are: \n");
for(i=1; i<=n; i++)
{
fact=0;
for(j=1; j<=n; j++)
{
if(i%j==0)
fact++;
}
if(fact==2)
printf("%d " ,i);
}
getch();
}
答案 5 :(得分:-1)
尝试自我解决,分别输入i和j的值,就会发现错误。
1。声明一个变量int并用0(int a = 0)对其进行初始化。
2。然后在if语句的内部for循环中为每个除法增加a的值。
If(i÷j==0)
{a=a+1;//or a++
}
3。现在退出循环,看看a的值是否仍为0,那么我是质数,否则不是!