5
2
2015
0

luogu 2378 因式分解

//90分,不想改了,用求根公式求两根即可
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

unsigned long long a[3];

string edit(int x) {
	string num="";
	if (x==0) return "x";
	int t=abs(x);
	while (t) {
		num+=t%10+'0';
		t/=10;
	}
	for (int i=0;i<num.size()/2;++i)
		swap(num[i],num[num.size()-i-1]);
	if (x>0) return "(x+"+num+")";
	else return "(x-"+num+")";
	return 0;
}

int main() {
    //freopen("in.txt","r",stdin);
	a[2]=1;
	int x; char c;
	while ((c=getchar())!=EOF) {
		if (c!='+' && c!='-') continue;
		int t; cin>>t; //cout<<'!';
		if (getchar()==EOF) {
			a[0]=t;
			if (c=='-') a[0]*=-1;
            break;
		}
		else {
            if (t==0) a[1]=1;
			else a[1]=t;
			if (c=='-') a[1]*=-1;
		}
	}
	//cout<<a[1]<<' '<<a[0]<<endl;
	int delta=sqrt(a[1]*a[1]-4*a[0]);
	int x2=(-a[1]+delta)/-2,x1=(-a[1]-delta)/-2;
	//cout<<delta<<' '<<x1<<' '<<x2<<endl;
	string s1=edit(x1),s2=edit(x2);
	if (s1==s2) cout<<s1<<"^2";
	else cout<<s1<<s2;
	return 0;
}
Category: 题解 | Tags: 模拟 数学 luogu
4
11
2015
0

XJOI 1003 质因数分解

//学军OJ首杀撒花!!^_^
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    long long n;
    cin>>n;

    int x=0;
    while (n%2==0) {
        ++x;
        n/=2;
    }
    if (x==1) cout<<"2*";
    else if (x)
    {
        cout<<2<<'^'<<x;
        if (n!=1) cout<<'*';
    }
    //处理质因数为2的情况
    for (int i=3;i<=n;i+=2)//因为偶质数只有2,所以只考虑奇数
    {
        x=0;
        while (true) {
            if (n%i==0) {
                ++x;
                n/=i;
            }
            else
            {
                if (x==0) break;
                if (x==1) cout<<i;
                else
                    cout<<i<<'^'<<x;
                if (n!=1) cout<<'*';
                break;
            }
        }
    }
 
    return 0;
}
Category: 题解 | Tags: 数学 XJOI

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com