我试图弄清楚如何计算一个数字是否为素数

时间:2014-07-02 02:59:58

标签: objective-c

我已经提炼了一下。有人可以为我改正吗? 我还介绍了一个新的变量isPrime,我想这有点好了

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        int p = 7;
        int d, isPrime = 0;

        if (p % 2 != 0)
        {
            for (d = 2; d < p; d++) {
                p % d;
            }
                if (p % d == 0)
                {
                    isPrime = 1; //not prime
                }
                if (p % d != 0)
                {
                    isPrime = 2; //is prime
                }
                if (isPrime == 1)
                {
                    NSLog(@"its not prime");
                }
                if (isPrime == 2) {
                    NSLog(@"its prime");
                }

        }
        else
            NSLog(@"sorry");
    }

    return 0;
}

4 个答案:

答案 0 :(得分:2)

有着名的Eratosthenes筛子,但是如果你正在编写一个程序,只是将一个数字作为输入并决定它是否是素数,那么Sieve的功能超出了你的需要(它发现所有素数都少于一些您选择的价值)所以它可能不是您最有效的算法选择。

关于寻找素数的其他一些事情:

如果您发现p不均匀,则只需尝试将其除以奇数数字,即3,5,7,9等等(是的,一旦你知道它不能被3整除,从技术上来说你知道它不能被9整除,但在你的算法中考虑这些东西可能不值得甚至效率。)

您不必尝试大于sqrt(p)的任何除数作为除数。如果到那时你还没有找到除数,你永远不会(除了1和p本身)。

如果您找到一个除p的数字,您可以立即说p不是素数。 (你可能还想确保你退出任何循环,否则你最终可能会打印p不是素数的公告。)

...但是在完成所有循环之后,你必须永远不会p是最优的,直到算法结束。在此之前,您可以说最多的是尚未找到p 素数的证明。

答案 1 :(得分:0)

这是素数计算的伪代码:

int num = 11;

NSString * res = null;
for(int i = 2 ;i<num ;i ++)
{
   if(num%i == 0)
   {
     res = @"This is not a prime number";
     break 
   }
 else{
     res = @"This is prime number";

   }

}

答案 2 :(得分:0)

上面的循环很好,但你必须从3而不是2开始。

答案 3 :(得分:-1)

试试这个

            int p = 7;
            int d, isPrime = 2;

            if (p % 2 != 0)
            {
                for (d = 2; (d < p) && (isPrime == 2); d++) {
                    if (p % d == 0)
                    {
                        isPrime = 1; //not prime
                    }
                    if (p % d != 0)
                    {
                        isPrime = 2; //is prime
                    }
                }
                if (isPrime == 1)
                {
                    NSLog(@"its not prime");
                }
                if (isPrime == 2) {
                    NSLog(@"its prime");
                }
            }
            else
                NSLog(@"sorry");