zoj 2723 Semi-Prime
生活随笔
收集整理的這篇文章主要介紹了
zoj 2723 Semi-Prime
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 題意都不好理解 我以為是求 一個數被分成2個素數和 然后是求分成2個素數積
// 坑爹 忘記寫 !=EOF 然后一直超時 然后換了幾種 還是超時 一看別人代碼 速度明顯比我慢
// 然后發現被自己坑了
#include <iostream> #include <math.h> #include <map> #include <stack> #include <queue> #include <vector> #include <algorithm> #include <stdio.h> #include <string.h> using namespace std; #define maxm 10010 #define maxn 1000010 int gcd(int a,int b){int r;while(r=a%b){a=b;b=r;}return b; } bool isp(int n){if(n==2) return true;if(n%2==0||n==1) return false;int m=(int)(sqrt(n+1.0));for(int i=3;i<=m;i+=2)if(n%i==0) return false;return true; } int fun(int n){int m,i;if(n%2==0){if(isp(n/2))return 1;elsereturn 0;}else{int k;m=(int)(sqrt(n+1.0));k=0;for(i=3;i<=m;i+=2)if(n%i==0){if(isp(i)&&isp(n/i)){return k=1;// printf("Yes\n");break;}}if(!k) return 0; //printf("No\n"); } } int main() {int n;int m;int i,k;while(scanf("%d",&n)!=EOF){if(fun(n)) printf("Yes\n");else printf("No\n");}return 0; }
// 郁悶 求出所有素數 還是不如上述快
#include <iostream> #include <math.h> #include <map> #include <stack> #include <queue> #include <vector> #include <algorithm> #include <stdio.h> #include <string.h> using namespace std; #define maxm 10010 #define maxn 1000010 int prim[maxn/3],p; bool f[maxn]; int gcd(int a,int b){int r;while(r=a%b){a=b;b=r;}return b; } bool isp(int n){if(n==2) return true;if(n%2==0||n==1) return false;int m=(int)(sqrt(n+1.0));for(int i=3;i<=m;i+=2)if(n%i==0) return false;return true; } int getprime(){int i,j;f[1]=true;for(i=4;i<=maxn;i+=2)f[i]=true;int m=(int)(sqrt(maxn+1.0));for(i=3;i<=m;i+=2){for(j=i*i;j<=maxn;j+=i)f[j]=true;}for(i=1;i<=maxn;i++)if(!f[i]) prim[p++]=i; } int main() {int n;int m;int i,k;getprime();while(scanf("%d",&n)!=EOF){m=(int)(sqrt(n+1.0));k=i=0;while(prim[i]<=m){if(n%prim[i]==0&&!f[n/prim[i]]){k=1;break;}i++;}if(!k) printf("No\n"); else printf("Yes\n");}return 0; }
// 坑爹 忘記寫 !=EOF 然后一直超時 然后換了幾種 還是超時 一看別人代碼 速度明顯比我慢
// 然后發現被自己坑了
#include <iostream> #include <math.h> #include <map> #include <stack> #include <queue> #include <vector> #include <algorithm> #include <stdio.h> #include <string.h> using namespace std; #define maxm 10010 #define maxn 1000010 int gcd(int a,int b){int r;while(r=a%b){a=b;b=r;}return b; } bool isp(int n){if(n==2) return true;if(n%2==0||n==1) return false;int m=(int)(sqrt(n+1.0));for(int i=3;i<=m;i+=2)if(n%i==0) return false;return true; } int fun(int n){int m,i;if(n%2==0){if(isp(n/2))return 1;elsereturn 0;}else{int k;m=(int)(sqrt(n+1.0));k=0;for(i=3;i<=m;i+=2)if(n%i==0){if(isp(i)&&isp(n/i)){return k=1;// printf("Yes\n");break;}}if(!k) return 0; //printf("No\n"); } } int main() {int n;int m;int i,k;while(scanf("%d",&n)!=EOF){if(fun(n)) printf("Yes\n");else printf("No\n");}return 0; }
// 郁悶 求出所有素數 還是不如上述快
#include <iostream> #include <math.h> #include <map> #include <stack> #include <queue> #include <vector> #include <algorithm> #include <stdio.h> #include <string.h> using namespace std; #define maxm 10010 #define maxn 1000010 int prim[maxn/3],p; bool f[maxn]; int gcd(int a,int b){int r;while(r=a%b){a=b;b=r;}return b; } bool isp(int n){if(n==2) return true;if(n%2==0||n==1) return false;int m=(int)(sqrt(n+1.0));for(int i=3;i<=m;i+=2)if(n%i==0) return false;return true; } int getprime(){int i,j;f[1]=true;for(i=4;i<=maxn;i+=2)f[i]=true;int m=(int)(sqrt(maxn+1.0));for(i=3;i<=m;i+=2){for(j=i*i;j<=maxn;j+=i)f[j]=true;}for(i=1;i<=maxn;i++)if(!f[i]) prim[p++]=i; } int main() {int n;int m;int i,k;getprime();while(scanf("%d",&n)!=EOF){m=(int)(sqrt(n+1.0));k=i=0;while(prim[i]<=m){if(n%prim[i]==0&&!f[n/prim[i]]){k=1;break;}i++;}if(!k) printf("No\n"); else printf("Yes\n");}return 0; }
?
?
轉載于:https://www.cnblogs.com/372465774y/p/3208798.html
總結
以上是生活随笔為你收集整理的zoj 2723 Semi-Prime的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海底两万里中水族部队指什么
- 下一篇: 保持整洁