10分求助!!!
  • 板块学术版
  • 楼主qzhw
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/11/20 21:24
  • 上次更新2023/11/3 23:55:01
查看原帖
10分求助!!!
397574
qzhw楼主2021/11/20 21:24

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;
}
2021/11/20 21:24
加载中...