《ACM程序设计》书中题目R-18

来源:互联网 发布:网络棋牌推广违法吗 编辑:程序博客网 时间:2024/06/06 16:40

(欢迎阅读我的博客,如发现错误或有建议请评论留言,谢谢。)

题目要求:

如果一个数可以看做两个质数相乘,则该数字为半质数。输入一些数字,判断是否为半质数,是输出“Yes”,否输出“No”。

题目思路:

写一个判断质数的函数,并用这个函数判断输入数字的每个因子是否为素数。

细节处理:

因为调用函数会消耗很大的内存,所以在调用函数时最好做出限制,来减少函数的调用次数。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int fun(long a)
{
    long i;
    for(i=2;i<a;i++)
    {
        if(a%i==0)
        {
            return 0;
            break;
            }
        }
        if(i==a)
        return 1;


    }
int main()
{
    long i,a;
while(cin>>a)
    {for(i=2;i<sqrt(a);i++)//此处i<sqrt(a)就是为了减少函数调用次数
    {
        if(fun(i)+fun(a/i)==2)
        {cout<<"Yes"<<endl;break;
        }}
        if(i==a/2+1)
cout<<"No"<<endl;}
    }

0 0