思路:开始一看,感觉暴不了,然后题目中有说大于100w的素因子只有一个,所以那就暴100w以内的质因子就行,最后剩下的不等于1的话,就是一个大于100w的素因子直接输出
#include <cstdio> #include <iostream> #include <cmath> #include <algorithm> #include <cstring> using namespace std; #define maxn 1000001 bool vis[maxn]; int prime[maxn]; int n_prime=0; void Prime() { memset(vis,true,sizeof(vis)); vis[1]=vis[0]=false; for(int i=2;i<maxn;i++) { if(vis[i]) { prime[++n_prime]=i; for(int j=2*i;j<maxn;j+=i) vis[j]=false; } } //cout<<n_prime<<" "<<prime[n_prime]<<endl; } int main() { Prime(); long long n; while(scanf("%lld",&n)!=EOF) { if(n<=0) break; for(int i=1;i<=n_prime;i++) { if(n%prime[i]==0) { while(n%prime[i]==0) { printf(" "); printf("%d ",prime[i]); n/=prime[i]; } } } if(n!=1) printf(" %lld ",n); printf(" "); } return 0; }