素数算法目标C说明请

时间:2015-02-03 07:01:20

标签: objective-c loops for-loop primes

对不起我的英语不好,我有一个问题,我正在学习目标c,我现在正在学习布尔值,我的问题是:为什么在代码中运行第二个循环时,数字2被采用作为素数,我的意思是,正如我所看到的那样,p在第一个循环中取值2,然后d从2开始,然后它说d< p,我认为这是p-1(2-1 = 1),所以代码如何工作,它没有意义,我理解为什么它适用于大于2的任何其他数字,但我不明白为什么它适用于2号!

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool
    {
        int p, d;
        BOOL isPrime;

        for (p = 2; p <= 50; p++)
        {
            isPrime = true;

            for (d = 2; d < p; d++)
            {
                if (p % d == 0)
                isPrime = false;
            }

            if (isPrime == true)
                NSLog(@"%i", p);
        }
    }
    return 0;
}

3 个答案:

答案 0 :(得分:1)

第一个循环开始p = 2,然后内循环取d=2,然后检查是否d<p。此条件为 false ,因为d=2 P=2。这意味着第一个内循环不会运行,并且isPrime在p的第一个循环中总是 true

答案 1 :(得分:0)

素数可以被1或其自身整除。 因此,我们检查1和数字之间所有数字的可分性。

这就是为什么我们从2开始直到数字-1

for(d = 2; d < p; d++ )

答案 2 :(得分:0)

Prime numbers are the numbers which are not divisible by any other number.They are divisible by itself only (eg 2,3,5,7) 

如果我们只检查到数字的一半,因为超过一半的数字不会分开。

-(BOOL)checkNumberPrimeNumber:(int)number{

        int i; BOOL flag=false;

        for (i=2; i<number/2; i++) {
            if (number%i==0) {
                flag=true;
                break;
            }
        }

        if (flag==true) {
            NSLog(@"%d is Not Prime Number",number);

        }
        else{
            NSLog(@"%d is Prime Number",number);
        }

        return YES;
    }