Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1658 Accepted Submission(s): 565
题解:让找最小的正整数M使N/M是素数;
水暴力,但是完全暴力会超,就想着折半找,先找这个最小正整数,如果不行就找素数;都找到sqrt(N)结束,这样就省了好多时间;
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; bool is_prim(int x){ if(x == 1)return false; for(int i = 2; i <= sqrt(x); i++){ if(x % i == 0)return false; } return true; } int main(){ int N; while(~scanf("%d",&N)){ if(N == 0 || N == 1){ puts("0");continue; } int i; int ans = 0; for(i = 1; i <= sqrt(N); i++){ if(N % i == 0 && is_prim(N/i)){ ans = i; break; } } if(ans){ printf("%d\n",ans);continue; } for(int j = sqrt(N); j > 1; j--){ if(N % j == 0 && is_prim(j)){ ans = N / j; break; } } printf("%d\n",ans); } return 0; }
Alexandra and Prime Numbers(思维)
原文:http://www.cnblogs.com/handsomecui/p/5377493.html