您的位置:首页 > 其它

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

2017-03-15 18:53 302 查看
(欢迎阅读我的博客,如发现错误或有建议请评论留言,谢谢。)

题目要求:

如果一个数可以看做两个质数相乘,则该数字为半质数。输入一些数字,判断是否为半质数,是输出“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;}

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: