筛选法 || POJ 1356 Prime Land
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define SZ 33005
char a[100];
bool isprime[SZ];
int primes[SZ], num[SZ];
int cnt;
void prime(int n)
{
memset(isprime, 1, sizeof(isprime));//1->是素数,0->不是素数
memset(primes, 0, sizeof(primes));
isprime[0] = 0;
isprime[1] = 0;
cnt = 0;
for(int i = 2; i <= n; i++)//========高亮!i<=n!高亮=========
{
if(!isprime[i]) continue;
primes[cnt++] = i;
for(int j = i * i ; j <= n; j += i)//========高亮!j<=n!高亮=========
isprime[j] = 0;
}
//cnt:n以内有cnt个质数
return;
}
int main()
{
while(1)
{
int n = 0, tmp1 = 0, tmp2 = 0, ans = 1;
gets(a);
int len = strlen(a);
for(int i = 0; i <= len; i++)
{
if(a[0] == '0') return 0;//等于0的时候终止 可以直接写return 0
if(a[i] == ' ' || a[i] == '\0')
{
if(n % 2 == 1)
{
for(int j = 0; j < tmp2; j++)
ans *= tmp1;
tmp1 = 0, tmp2 = 0;
}
n++;
if(a[i] == ' ') continue;
else break;
}
if(n % 2 == 0) tmp1 = tmp1 * 10 + a[i] - '0';
else tmp2 = tmp2 * 10 + a[i] - '0';
}
ans -= 1;
prime(ans);//求ans内的质数
memset(num, 0, sizeof(num));
int j = 0;
while(j < cnt)
{
if(ans % primes[j] == 0)
{
num[j]++;
ans /= primes[j];
}
else j++;
if(ans == 1) break;
}
for(int i = cnt - 1; i >= 0; i--)
{
if(!num[i]) continue;
printf("%d %d ", primes[i], num[i]);
}
printf("\n");
}
return 0;
}
筛选法 || POJ 1356 Prime Land的更多相关文章
- POJ 1365 Prime Land(数论)
题目链接: 传送门 Prime Land Time Limit: 1000MS Memory Limit: 10000K Description Everybody in the Prime ...
- [POJ 1365] Prime Land
Prime Land Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3211 Accepted: 1473 Descri ...
- POJ 1365 Prime Land(整数拆分)
题意:感觉题意不太好懂,题目并不难,就是给一些p和e,p是素数,e是指数,然后把这个数求出来,设为x,然后让我们逆过程输出x-1的素数拆分形式,形式与输入保持一致. 思路:素数打表以后正常拆分即可. ...
- 筛选法 || POJ 3292 Semi-prime H-numbers
5,9,13,……叫H-prime 一个数能且仅能由两个H-prime相乘得到,则为H-semi-prime 问1-n中的H-semi-prime有多少个 *解法:vis初始化为0代表H-prime, ...
- POJ 2689 Prime Distance (素数筛选法,大区间筛选)
题意:给出一个区间[L,U],找出区间里相邻的距离最近的两个素数和距离最远的两个素数. 用素数筛选法.所有小于U的数,如果是合数,必定是某个因子(2到sqrt(U)间的素数)的倍数.由于sqrt(U) ...
- ACM/ICPC 之 数论-素数筛选法 与 "打表"思路(POJ 1595)
何为"打表"呢,说得简单点就是: 有时候与其重复运行同样的算法得出答案,还不如直接用算法把这组数据所有可能的答案都枚举出来存到一个足够大的容器中去-例如数组(打表),然后再输入数据 ...
- poj 2262 Goldbach's Conjecture(素数筛选法)
http://poj.org/problem?id=2262 Goldbach's Conjecture Time Limit: 1000MS Memory Limit: 65536K Total ...
- POJ 3978 Primes(素数筛选法)
题目 简单的计算A,B之间有多少个素数 只是测试数据有是负的 //AC //A和B之间有多少个素数 //数据可能有负的!!! #include<string.h> #include< ...
- PAT甲题题解-1059. Prime Factors (25)-素数筛选法
用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...
随机推荐
- sublime 插件:Emmet
Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码,大大提高了HTML/CSS代码编写的速度,比如下面的演示: ...
- oracle 在insert into的时候报ORA-00928: missing SELECT keyword错 [问题点数:100分,结帖人dm520]
转自:https://bbs.csdn.net/topics/310095274 INSERT INTO SA_Table(uniPositionCode,transferGroupName,appC ...
- JAVA基础--函数和数组03
一.函数的引入 函数的引入 能把相同的代码都抽出来,放到一个地方,等到要使用的时候再去调用,如果有不同的数据,在使用的时候传递就行了: 2. 函数的概念:函数又叫方法,一段独立于代码块 直接卸载类中, ...
- 洛谷 - P2730 - 魔板 Magic Squares - bfs
写状态转移弄了很久,老了,不记得自己的数组是怎么标号的了. #include <bits/stdc++.h> using namespace std; #define ll long lo ...
- hdoj5698
果然以前不想搞的东西,今天他妈全来了,我要爆炸,除了说操....真是欲哭无泪啊..... //这道题目卡在逆元了.... //利用逆元计算1/(n!(m-n)!) //对于正整数a,m如果有ax≡1( ...
- bzoj 2023: [Usaco2005 Nov]Ant Counting 数蚂蚁【生成函数||dp】
用生成函数套路推一推,推完老想NTT--实际上把这个多项式乘法看成dp然后前缀和优化一下即可 #include<iostream> #include<cstdio> using ...
- bzoj 3232: 圈地游戏【分数规划+最小割】
数组开小导致TTTTTLE-- 是分数规划,设sm为所有格子价值和,二分出mid之后,用最小割来判断,也就是判断sm-dinic()>=0 这个最小割比较像最大权闭合子图,建图是s像所有点连流量 ...
- React的深入浅出
react组件重新渲染有两种途径:1.自身调用setState:2.父组件传入新的props.3.但这两种途径都不会必然调用render而引起重新渲染, 都会先经过shouldComponentUpd ...
- 前端开发常用cmd命令
windows打开命令行 开始->运行->键入cmd 也可通过附件查找到命令提示符,右键属性为其设置快捷键 快捷键 更改路径 d: // 切换到d盘 cd <fold ...
- Jmeter安装说明
本文主要介绍Jmeter工具的安装 一.安装JDK 1.下载jdk,到官网下载jdk,下载jkd1.8即可,地址:http://www.oracle.com/technetwork/java/java ...