杭电ACM1164

来源:互联网 发布:mac输入法记忆 编辑:程序博客网 时间:2024/06/06 07:34

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1164

题目大意:给出任意一个小于等于65535的数字,要求求出它的全部质因数,并以质因数相乘的形式输出。

解题思路:简单题。程序的最开始先打表,求出65535之前的全部质数,然后用一个循环一一判断每个质数是否是当前数字的因数,若是则保存在一个数组里,同时保存这个数组的下标,然后根据这个数组进行输出。

AC代码:

#include <iostream>#include <math.h>using namespace std;int factor[100000];int p[65536];int getfactor(int n){int index=0;int i=0;int temp = n;while(n!=1&&p[i]<=temp){if(n%p[i]==0){factor[index] = p[i];index++;n/=p[i];}else i++;}return index;}int main(){int index=0;int n;int num;for(int i=2;i<65536;i++){int j;for(j=2;j<=sqrt(i);j++){if(i%j==0)break;}if(j>sqrt(i)){p[index] = i;index++;}}while(cin>>n){num = getfactor(n);for(int i=0;i<num;i++){if(i==0)cout<<factor[i];else cout<<"*"<<factor[i];}cout<<endl;}return 0;}


0 0