《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;}
}
题目要求:
如果一个数可以看做两个质数相乘,则该数字为半质数。输入一些数字,判断是否为半质数,是输出“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;}
}
相关文章推荐
- ACM程序设计题目 Problem R-18
- 《ACM程序设计》书中题目 R - 18 半素数
- 机器学习技法作业二题目12-18
- 《ACM程序设计》书中题目 K-11 build a wall
- 《ACM程序设计》书中题目 L-12 字符串倒置
- 《ACM程序设计》书中题目--problem n
- 《ACM程序设计》书中题目U 第二十一题 漂亮的数字
- 《ACM程序设计》书中题目T(谁的几次方最接近它O.O。。。)
- 《ACM程序设计》书中题目 X - 24 打电话
- 《ACM程序设计》书中题目 Z - 26 名字缩写
- 《ACM程序设计》书中题目 Z
- 题目18:查找学生信息
- 离散题目18(传递闭包)
- 《ACM程序设计》书中题目K-11
- 《ACM程序设计》书中题目 H-08 火星ACM
- 《ACM程序设计》书中题目L(写字顺序)
- 《ACM程序设计》书中题目 J
- 《ACM程序设计》书中题目B-2
- 《ACM程序设计》书中题目N 第十四题 反转数字相加的反转数
- 《ACM程序设计》书中题目 T - 20 A的N次方近似于B