pat a1059 Prime Factors (25分) 【质因子分解】

题目:

https://www.nowcoder.com/pat/5/problem/4112

https://pintia.cn/problem-sets/994805342720868352/problems/994805415005503488

Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p​1​​​k​1​​​​×p​2​​​k​2​​​​×⋯×p​m​​​k​m​​​​.

Input Specification:

Each input file contains one test case which gives a positive integer N in the range of long int.

Output Specification:

Factor N in the format N = p​1​​^k​1​​*p​2​​^k​2​​**p​m​​^k​m​​, where p​i​​'s are prime factors of N in increasing order, and the exponent k​i​​ is the number of p​i​​ -- hence when there is only one p​i​​, k​i​​ is 1 and must NOT be printed out.

Sample Input:

97532468

Sample Output:

97532468=2^2*11*17*101*1291
#include
using namespace std;

struct factor
{
	int x;
	int cnt;
} fac[10];//10个质数相乘已经超出了int表示的范围

int main()
{
	int n;
	cin>>n;
	int m=n;  //用m存一下!!以便输出。 
	
	//n=1,特判。 
	if(n==1)
	{
		cout<<"1=1";
		return 0;  //别忘记及时return,终止程序!! 
	} 
	
	int num=0; //记录n的质因子的个数 
	
	//1、求出质因子: 	
	int sqr=(int)sqrt(1.0*n);
	for(int i=2;i<=sqr;i++)
	{
		if(n%i==0)
		{
			fac[num].x=i;
			fac[num].cnt=0;
			while(n%i==0)
			{
				fac[num].cnt++; 
				n/=i;
			}
			num++;
		}
		if(n==1) break;
	}
	if(n!=1)  //存在大于sqrt(n)的质因子
	{
		fac[num].x=n;
		fac[num].cnt=1;
		num++;
	}
	
	//2、输出:
	cout<

 

#include
#include
#include 
using namespace std;

const int maxn=100010;

bool is_prime(int n)
{
	if(n==1) return false;
	else 
	{
		int sqr=(int)sqrt(1.0*n);
		for(int i=2;i<=sqr;i++)
		{
			if(n%i==0) return false;
		}
		return true;
	}
} 

int prime[maxn];
int pnum=0;

/*
因为大部分数字的因子分解,都是可以通过某几个质数的重现得到,即一个质数可能在因子分解式中出现多次;
所以,无需一直求到n的质数,前几次测试出现的段错误,都是因为开的质数表放不下了。
*/ 
/*
//错误代码: 
void find_prime(int n)
{
	for(int i=2;i>n;
	
	//find_prime(n);
	
	if(n==1) cout<<"1=1";
	else
	{
		cout<0) cout<<'*';
			cout<1) cout<<'^'<=0&&i

 

你可能感兴趣的:(#,★,算法笔记,#,7,数学题)