1. 程式人生 > >數學問題 | 連續質因數分解:1096

數學問題 | 連續質因數分解:1096

opened blog one 質因數分解 == mem ans -i 特殊

這題真的是觸及到了我的知識盲區,寫了一個16分的答案,看了答案(開長整型找不到結果的特殊判斷)之後改成了18分,還是沒有AC。終於,我仔細一看標準代碼,發現這題不簡單。

wa代碼:

技術分享圖片
#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include 
<map> #define I scanf #define OL puts #define O printf #define F(a,b,c) for(a=b;a<c;a++) #define FF(a,b) for(a=0;a<b;a++) #define FG(a,b) for(a=b-1;a>=0;a--) #define LEN 1010 #define MAX (1<<30)-1 #define V vector<int> typedef long long ll; using namespace std; int main(){
int n; n=6; // I("%lld",&n); int t=n,i; vector<int> ans; vector<int> cur; bool flag=0; for(i=2;i<=sqrt(n);i++){ if(t%i==0){ cur.push_back(i); t/=i; flag=1; }else{ if(flag){ //斷了 t=n;
if(cur.size()>ans.size()){// || (cur.size()>0&&ans.size()>0&& cur.size()==ans.size() && cur[0]<ans[0]) ans=cur; } cur.clear(); } flag=0; } } if(cur.size()>ans.size()){ ans=cur; } int sz=ans.size(); if(sz){ O("%d\n",sz); FF(i,sz){ O("%d",ans[i]); if(i!=sz-1) O("*"); } }else O("%d\n%d",1,n); return 0; }
View Code

抄了一遍答案代碼(沒力氣默了),感覺寫的比我的垃圾強多了。

AC代碼:

#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map>

#define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 1010
#define MAX (1<<30)-1
#define V vector<int>

typedef long long ll;

using namespace std;



int main(){
    ll n;
    n=630;
    I("%lld",&n);
    ll i;
    int ansI=0,ansLen=0;
    for(i=2;i<=sqrt(n);i++) if(n%i==0){
        ll tmp=1,j=i;
        while(1){
            tmp*=j;
            if(n%tmp) break;
            if(j-i+1>ansLen){
                ansI=i;
                ansLen=j-i+1;
            }
            j++;
        }
    }
    if(ansLen){
        O("%d\n",ansLen);
        for(ll i=0;i<ansLen;i++){
            O("%lld",ansI+i);
            if(i<ansLen-1) O("*");
        }
    }else O("%d\n%d",1,n);

    return 0;
}

數學問題 | 連續質因數分解:1096