#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;
}
答案 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");