P1619 解一元二次方程的烦恼
测试点
#include<bits/stdc++.h>
using namespace std;
long long n,sum,maxx,nn,b[100000000];
char a[100000000];
bool Prime;
bool prime(long long x)
{
if(x<2)
return 0;
for(int i=2;i<=sqrt(x);i++)
if(x%i==0)
return 0;
return 1;
}
int main()
{
while(1)
{
printf("Enter the number=\n");
gets(a);
for(int i=0;i<=strlen(a);i++)
if(a[i]>='0'&&a[i]<='9')
sum++;
if(sum==0)
return 0;
for(int i=0;i<=strlen(a);i++)
if(a[i]>='0'&&a[i]<='9')
{
sum--;
n+=pow(10,sum)*(int)(a[i]-'0');
}
printf("Prime? ");
Prime=prime(n);
if(Prime==1)
{
printf("Yes!\n\n");
continue;
}
else
printf("No!\n");
if(n>40000000)
{
printf("The number is too large!\n\n");
continue;
}
if(Prime==0)
{
nn=n;
for(int i=3;i<=n;i+=2)
{
if(nn%2==0)
{
while(1)
{
if(nn%2!=0)
break;
else
{
nn/=2;
b[2]++;
}
}
}
if(prime(i)==1)
{
if(nn%i==0)
{
while(1)
{
if(nn%i!=0)
break;
else
{
nn/=i;
b[i]++;
}
}
}
}
}
if(n!=1)
printf("%d=",n);
for(int i=1;i<=n;i++)
{
if(b[i]!=0)
maxx=i;
}
for(int i=1;i<=n;i++)
{
if(b[i]!=0&&i!=maxx)
cout<<i<<"^"<<b[i]<<"*";
if(b[i]!=0&&i==maxx)
cout<<i<<"^"<<b[i];
}
if(nn!=1)
cout<<"*"<<nn<<"\n\n";
else
cout<<"\n\n";
}
else
printf("\n");
sum=0;
n=0;
nn=0;
}
return 0;
}