zoukankan      html  css  js  c++  java
  • PAT 1059 Prime Factors (25)

    Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p~1~^k~1~ * p~2~^k~2~ *…*p~m~^k~m~.

    Input Specification:

    Each input file contains one test case which gives a positive integer N in the range of long int.

    Output Specification:

    Factor N in the format N = p~1~^k~1~ * p~2~^k~2~ *…*p~m~^k~m~, where p~i~'s are prime factors of N in increasing order, and the exponent k~i~ is the number of p~i~ -- hence when there is only one p~i~, k~i~ is 1 and must NOT be printed out.

    Sample Input:

    97532468
    

    Sample Output:

    97532468=2^2*11*17*101*1291

     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 struct node{
     5   int x, cnt;
     6 }f[40];
     7 
     8 int prime[100010], vis[100010]={0}, pNum=0, cnt=0;
     9 void getPrime(){
    10   for(int i=2; i<100010; i++){
    11     if(!vis[i]){
    12       prime[pNum++] = i;
    13       for(int j=i+i; j<100010; j += i) vis[j]=1;
    14     }
    15   }
    16 }
    17 
    18 void factor(long n){
    19   for(int i=0; i<pNum && n!=1; i++){
    20       if(n%prime[i]==0){
    21         f[cnt].cnt=0;
    22         while(n%prime[i]==0){
    23             f[cnt].cnt++;
    24             f[cnt].x=prime[i];
    25             n /= prime[i];
    26         }
    27         cnt++;
    28       }
    29   }
    30   if(n!=1){
    31     f[cnt].x=n;
    32     f[cnt].cnt=1;
    33   }
    34 }
    35 int main(){
    36   long int n, i;
    37   cin>>n;
    38   getPrime();
    39   factor(n);
    40   if(n==1){ cout<<"1=1"<<endl; return 0;}
    41   printf("%d=", n);
    42   for(i=0; i<cnt; i++){
    43     if(i>0) printf("*");
    44     printf("%d", f[i].x);
    45     if(f[i].cnt>1) printf("^%d", f[i].cnt);
    46   }
    47   return 0;
    48 }
     1 #include<iostream>
     2 using namespace std;
     3 bool isPrime(long int num){
     4   if(num<2) return false;
     5   for(int i=2; i*i<num+1; i++)
     6     if(num%i==0) return false;
     7   return true;
     8 }
     9 int main(){
    10   long int num,i;
    11   cin>>num;
    12   if(num==1){cout<<"1=1";return 0;}//特俗处理数字1
    13   cout<<num<<"=";
    14   bool flag=true;//标记是否已经输出第一个元素
    15   for(i=2; i<=num; i++){
    16     int cnt=0;
    17     if(isPrime(i)){
    18       while(num%i==0){//计算该质数因子的指数
    19         num/=i;
    20         cnt++;
    21       }
    22       if(cnt!=0){//如果该质数是因子,输出该因子
    23             if(flag){
    24                 cout<<i;
    25                 flag = false;
    26              }else cout<<"*"<<i;
    27         if(cnt>1) cout<<"^"<<cnt;}
    28     }
    29   }
    30   return 0;
    31 }
     
    有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
  • 相关阅读:
    12月11日
    081212 晴
    12月10日
    树莓派项目——基于树莓派的WIFI网络互传系统设计
    IDE
    边缘检测
    Android Launcher桌面应用快捷方式的开发
    android ui事件处理分析
    listview 分析
    ApplicationsIntentReceiver.class
  • 原文地址:https://www.cnblogs.com/mr-stn/p/9225971.html
Copyright © 2011-2022 走看看