Codeforces 584D Dima and Lisa(质数查找)
2016-08-04 16:43
323 查看
题意:
给一个奇数n (3<=n<10^9),分解成1~3个质数之和。
分情况讨论:
1:本身就是质数,直接输出。
2:因为偶质数只有2,所以分解成2个质数的情况下只能是2和n-2,判断n-2即可。
3.特殊情况:2+2+n-4=n,判断n-4即可。
一般情况:奇+奇+奇=奇,从最大的质数a开始找。
a范围:3~n-6(假设bc都是3)
b范围:3~n-a-3(假设c是3)
c:n-a-b
一开始想打表,但是10^9太大,数组装不下,改成用函数判断,跑完只用了15ms,查了一下好像是因为10^9内的相邻质数之差都很小。
题意是一定有解,不过出于无聊让程序在无解时输出3个-1。
给一个奇数n (3<=n<10^9),分解成1~3个质数之和。
分情况讨论:
1:本身就是质数,直接输出。
2:因为偶质数只有2,所以分解成2个质数的情况下只能是2和n-2,判断n-2即可。
3.特殊情况:2+2+n-4=n,判断n-4即可。
一般情况:奇+奇+奇=奇,从最大的质数a开始找。
a范围:3~n-6(假设bc都是3)
b范围:3~n-a-3(假设c是3)
c:n-a-b
一开始想打表,但是10^9太大,数组装不下,改成用函数判断,跑完只用了15ms,查了一下好像是因为10^9内的相邻质数之差都很小。
题意是一定有解,不过出于无聊让程序在无解时输出3个-1。
#include<stdio.h> #include<stdlib.h> #include<algorithm> #include<math.h> #include<string.h> #include<queue> #include<vector> #include<map> #include<iostream> #include<string> #define LL long long using namespace std; bool isprime(int a) { if(a<=1) return 0; if(a==2||a==3) return 1; for(int i=3;i<=sqrt(a);i+=2) if(a%i==0) return 0; return 1; } int main() { //freopen("test.txt","r",stdin); int n,a=-1,b=-1,c=-1; scanf("%d",&n); if(isprime(n)) printf("1\n%d\n",n); else if(isprime(n-2)) printf("2\n2 %d\n",n-2); else if(isprime(n-4)) printf("3\n2 2 %d\n",n-4); else { for(int i=n-6;i>3;i-=2) if(isprime(i)) for(int j=n-i-3;j>3;j-=2) if(isprime(j)) if(isprime(n-i-j)) { a=i,b=j,c=n-i-j; goto l1; } l1:printf("3\n%d %d %d\n",a,b,c); } return 0; }
相关文章推荐
- CodeForces - 584D Dima and Lisa (素数拆分)数学规律
- Codeforces 584D Dima and Lisa【素数+暴力】
- Codeforces 584D Dima and Lisa(数论)
- CodeForces 584D - Dima and Lisa(数论)
- Codeforces 584D Dima and Lisa 【数学】
- CodeForces - 584D Dima and Lisa (素数拆分,暴力)
- CodeForce 584D Dima and Lisa(哥德巴赫猜想)
- codeforces 324# D. Dima and Lisa (素数问题)
- Codeforces 584 D. Dima and Lisa ( Codeforces Round #324 (Div. 2))
- Codeforces400D Dima and Bacteria
- CF#324-D-Dima and Lisa-暴力水题-弱哥德巴赫猜想
- codeforces 366C C. Dima and Salad(dp)
- 【Codeforces Round 324 (Div 2)D】【miller-rabin素数检验 猜想】Dima and Lisa 奇数拆分成三素数
- Codeforces Round #324 (Div. 2) Dima and Lisa 哥德巴赫猜想
- codeforces 400D Dima and Bacteria 并查集+floyd
- codeforces 560 E. Gerald and Giant Chess (dp+lucas定理,求大组合数 mod p,p为质数)
- 【codeforces】Dima and Guards
- CodeForces - 366D Dima and Trap Graph (并查集&技巧)好题
- CODEFORCES 272C Dima and Staircase <细节理解题+简单技巧>
- Codeforces Round #324 (Div. 2) D. Dima and Lisa 数论 三素数定理