-5

这就是标题。
简单地说,我写了这个。

#include <iostream>
using namespace std;  
int main()  
{ 
    int a,i;  
    cout<<"Enter a number: ";  
    cin>>a;  
    for (i=2;i<=a/2;i++)  
    {  
        if (a%i==0)  
        {  
            cout<<"Its not Prime Number.";  
           system ("pause");  
            return 0;  
        }  
    }  
    cout<<"Its a Prime number.";  
    system ("pause");  
    }   

最主要的是不使用循环和递归函数。

4

3 回答 3

2

您主要想看看将 for 循环的主体变成一个以“int i”作为参数的函数。然后在函数的开头对 i<=a/2 进行测试,并在函数的末尾调用“function(i + 1)”。

于 2013-01-18T14:10:51.987 回答
0

这是一个递归素数测试函数:

int test_prime(unsigned n, unsigned d)
{
    if (n < 2) {
        return 0;
    }

    if (d == 1) {
        return 1;
    } else {
        if (n % d == 0) {
            return 0;
        } else {
            return test_prime(n, d - 1);
        }
    }
}

像这样使用它:

unsigned n;
std::cin >> n;
std::cout << (test_prime(n, n / 2) ? "prime" : "not prime") << "\n";
于 2013-01-18T14:11:35.120 回答
0

这是一个基于递归的解决方案,如果提供了编译时常量值,它也可以在编译时执行计算:

constexpr bool check_divisibility(int i, int j)
{
    return (j == 1) ? false : 
           ((i % j == 0) ? true : check_divisibility(i, j - 1));
}

constexpr bool is_prime(int i) { return !check_divisibility(i, i / 2); }

以下是在客户端代码中使用它的方法:

#include <iostream>

using namespace std;

int main()
{
    static_assert(is_prime(11), "Error!"); // Computed at compile-time
    int x = 15;
    cout << is_prime(x); // Computed at run-time
}
于 2013-01-18T14:28:50.300 回答