题意:
给出一个数,然后对他进行类似于进制的分解,不过在这是素数;
思路:
根据分解数,可以把p1 提出来,然后a1 = n / p1 % p2;
以此类推,系数a就可以出来
PS:很好想出思路,敲代码实现有点慢,多练!
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100000 + 10;
typedef long long ll;
ll n;
bool is_[maxn];
int prime[maxn];
int Init()
{
int len = 0;
prime[len++] =1;
memset(is_,true,sizeof(is_));
for(int i = 2; i < maxn; i ++)
{
if(is_[i])
{
for(int j = i + i; j < maxn; j += i)
is_[j] = false;
prime[len ++] = i;
}
}
return len;
}
int ans = 0;
string s[maxn/ 10];
int a[maxn];
int main()
{
int len = Init();//这里1特殊考虑一下
while( ~ scanf("%I64d",&n) && n)
{
cout << n << " = ";
int k = 1;
int temp = n;
int ks = 1;
while(n)
{
a[k] = n / prime[k - 1] % prime[k];
n = n/ prime[k - 1] - a[k];
k ++;
}
s[0] = "";
string t = "";
for(int i = 0; i < k; i ++)
{
if(a[i])
{
s[ks] = "";
char sk[20];
sprintf(sk,"%d",a[i]);
s[ks] += sk;
s[ks] += t;
ks ++;
}
if(i != 0)
{
t += "*";
char sk[20];
sprintf(sk,"%d",prime[i]);
t += sk;
}
}
for(int i = 1; i < ks ; i ++)
{
cout << s[i];
if(i < ks - 1)
cout << " + ";
else cout << endl;
}
// istringstream iss (s)
// int n;
// iss>>n;
}
return 0;
}