HOJ MaoLaoDa Number
来源:互联网 发布:思迅天店软件免费下载 编辑:程序博客网 时间:2024/06/05 19:07
/*
* File: main.cpp
* Author: 6100300115
* Created on 2012年2月28日, 下午4:09
*/
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
const int MAX = 46500;
* 题意:任意给你一个数,问你他能否分解成两个素数之积。
* 所给出数的大小在:int有符号数的范围内
* 那么开根号小于:46500
* 即任何一个数不可能是大于46500的两个素数之乘积。
* 实际上46500以内的素数已经很少了,
* 那么我们就让此数除以46500内小于其开根号的所有素数,
* 如果无一整除,那么此数必然是一个素数,不满足情况。
* 如果能被其中一个整除,那么只需判断另一个是否是素数
* 即可,先试一下同上的判断方法,因为复杂度不是很高。
* 如果还不行就用费马小定理。
*/
void find_prime() {
pri[0] = 2;
pri[1] = 3;
size = 2;
bool judge;
for (int i = 4; i < MAX; i++) {
judge = false;
for (int j = 0; pri[j] * pri[j] <= i; j++) {
if (i % pri[j] == 0) {
judge = true;
break;
}
}
if (judge)continue;
pri[size++] = i;
}
}
bool judge_prime(int n) {
for (int i = 0; pri[i] * pri[i] <= n; i++) {
if (n % pri[i] == 0) {
return false;
}
}
return true;
}
int main() {
// cout << sqrt(2147483647.0) << endl;
find_prime();
int n;
bool judge;
while (scanf("%d", &n) != EOF) {
judge = false;
for (int i = 0; (long long) pri[i] * pri[i] <= (long long) n; i++) {
if (n % pri[i] == 0) {
if (judge_prime(n / pri[i]) == true) {
judge = true;
}
break;
}
}
if (judge == true) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return 0;
}
* File: main.cpp
* Author: 6100300115
* Created on 2012年2月28日, 下午4:09
*/
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
const int MAX = 46500;
int pri[MAX];
int size;
/** 题意:任意给你一个数,问你他能否分解成两个素数之积。
* 所给出数的大小在:int有符号数的范围内
* 那么开根号小于:46500
* 即任何一个数不可能是大于46500的两个素数之乘积。
* 实际上46500以内的素数已经很少了,
* 那么我们就让此数除以46500内小于其开根号的所有素数,
* 如果无一整除,那么此数必然是一个素数,不满足情况。
* 如果能被其中一个整除,那么只需判断另一个是否是素数
* 即可,先试一下同上的判断方法,因为复杂度不是很高。
* 如果还不行就用费马小定理。
*/
void find_prime() {
pri[0] = 2;
pri[1] = 3;
size = 2;
bool judge;
for (int i = 4; i < MAX; i++) {
judge = false;
for (int j = 0; pri[j] * pri[j] <= i; j++) {
if (i % pri[j] == 0) {
judge = true;
break;
}
}
if (judge)continue;
pri[size++] = i;
}
}
bool judge_prime(int n) {
for (int i = 0; pri[i] * pri[i] <= n; i++) {
if (n % pri[i] == 0) {
return false;
}
}
return true;
}
int main() {
// cout << sqrt(2147483647.0) << endl;
find_prime();
int n;
bool judge;
while (scanf("%d", &n) != EOF) {
judge = false;
for (int i = 0; (long long) pri[i] * pri[i] <= (long long) n; i++) {
if (n % pri[i] == 0) {
if (judge_prime(n / pri[i]) == true) {
judge = true;
}
break;
}
}
if (judge == true) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return 0;
}
- HOJ MaoLaoDa Number
- [数论] HOJ 2561 MaoLaoDa Number 筛素数
- HOJ 2275 Number Sequence
- HOJ 2065 Fibonacci Number
- HOJ 1296 Big Number
- Hoj 1058 Number Triangles
- hoj 2275 Number Sequence
- HOJ 1058 Number Triangles
- hoj 2275 Number sequence
- Hoj 2275 Number Sequence
- hoj 1058 Number Triangles
- Hoj 13326 Biggest Number
- HOJ 2275 Number sequence
- [DP]HOJ 1058Number Triangles
- 博弈论 HOJ 1122 Number Game
- hoj 2275 Number sequence 树状数组解法
- HOJ 2275 Number sequence(树状数组)
- DP入门题------ Number Triangles HOJ 1058
- telnet登录android开发板
- 关于级、届、毕业、结业、肄业
- __attribute__ 详解
- 压力测试shell脚本
- [转]几款在线文本编辑器的比较
- HOJ MaoLaoDa Number
- std::swap
- 文本分页显示(2)
- 使PopupWindows的EditText获得焦点
- jsp与数据库的链接编码问题
- linux常用svn命令
- 思维没了,变成了机器
- 将bmp图片批量转png
- exchange partition 的用法