为什么我的 if语句无法正常工作 - 如果((l1%PrimeArr [l2])== 0)。以下是我编码的内容 -
/* Find all prime numbers<=N */
# include<stdio.h>
#define SIZE 100
void main()
{
int PrimeArr[SIZE];
int number;
int primeIndex=2; // 2 for 2 and 3 in the array
int l1; // loop counter 1
int l2; // loop counter 2
int l3; // loop counter 3
// 1. 2 is the only even prime number, save this in PrimeArray
PrimeArr[0]=2;
// 2. 3 is first odd prime number, save this in PrimeArray too.
PrimeArr[1]=3;
// 3. ask user uptil which number he want primes.
printf("\n Enter your number:");
scanf("%d",&number);
// 4. for numbers 4 to N if number P is divisible by all prime numbers less than P
for(l1=4;l1<=number;l1++){
for(l2=0;l2<primeIndex;l2++)
{
// 4.1 if yes, then p is composite
if((l1 % PrimeArr[l2]) == 0)
break; /* found out that the number is composite so let's get out of this loop to avoid unnecessary division */
else
{
//4.2.1 save this prime in prime array
PrimeArr[primeIndex++]=l1;
}
}
}
// display your prime array.
for(l3=0;l3<primeIndex;l3++)
printf("%d ",PrimeArr[l3]);
}
基本上当它到达内部循环时,if被忽略。 我想要做的是 - “如果数字可以被数组中可用的任何素数整除,则打破当前循环”但是它总是被忽略,而控制总是在其他地方。
答案 0 :(得分:1)
您解决此问题的方法存在缺陷。在嵌套的for循环中,你只是检查一个数字是否是偶数,如果它不是你将它归类为一个明显不正确的素数(例如,9,15等不是素数)。
现在,您应该检查,直到该数字的一半,它可以被整除。
for(i=2; i<=number/2; ++i)
{
// condition for nonprime number
if(number%i==0)
{
flag=1;
break;
}
}
if (flag==0)
PrimeArr[primeIndex++] = number;
在你的外部for循环中尝试这个。记得宣布国旗和我等。