zoj 2723 Semi-Prime(set)

本文介绍了一种用于判断半素数的有效算法,并提供了完整的C++实现代码。文章首先定义了素数与半素数的概念,然后详细阐述了如何构建素数表及半素数表,最后演示了如何利用这些表来快速判断一个给定的整数是否为半素数。
Semi-Prime

Time Limit: 2 Seconds      Memory Limit: 65536 KB

Prime Number Definition 
An integer greater than one is called a prime number if its only positive divisors (factors) are one and itself. For instance, 2, 11, 67, 89 are prime numbers but 8, 20, 27 are not.

Semi-Prime Number Definition 
An integer greater than one is called a semi-prime number if it can be decompounded to TWO prime numbers. For example, 6 is a semi-prime number but 12 is not.

Your task is just to determinate whether a given number is a semi-prime number.

Input

There are several test cases in the input. Each case contains a single integer N (2 <= N <= 1,000,000)

Output

One line with a single integer for each case. If the number is a semi-prime number, then output "Yes", otherwise "No".

Sample Input

3
4
6
12

Sample Output

No
Yes
Yes
No

建立素数表和半素数表,建立半素数表是通过素数表中的任意两个素数相乘得到保存起来。

 1 #include <iostream>
 2 #include <vector>
 3 #include <set>
 4 #include <cmath>
 5 using namespace std;
 6 //建立全局向量,用来保存素数
 7 vector<int> v;
 8 //在全局内存中定义全局集合容器,用来保存半素数
 9 //集合是平衡二叉检索树,搜索速度最快
10 set<int> s;
11 //建立[a, b]范围内素数表
12 void pt(int a, int b){
13     for(int i = a; i <= b; i++){
14         //2是素数,清除2的倍数
15         if(i != 2 && i % 2 == 0) continue;
16         //消除素数的倍数 
17         for(int j = 3; j * j <= i; j += 2){
18             if(i % j == 0)
19                 goto RL;
20         }
21         v.push_back(i);
22         RL: continue;
23     }
24 }
25 
26 int main(){
27     pt(2, 500000);
28     int i, j, p;
29     for(i = 0; i < v.size(); i++){
30         for(j = 0; j < v.size(); j++){
31             p = v[i] * v[j];
32             if(p < 1000000)
33                 s.insert(p);
34             else
35                 break;
36         }
37     }
38     //读入数据,在半素数表中查找,看是否在该表
39     int n;
40     set<int>::iterator it;
41     while(cin >> n){
42         it = s.find(n);
43         if(it != s.end())
44             cout << "Yes" << endl;
45         else
46             cout << "No" << endl;
47     }
48     return 0;
49 }

 

转载于:https://www.cnblogs.com/qinduanyinghua/p/6530865.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值