素数

Description

Download as PDF
Webster defines prime as:


prime (prim) n.[ME, fr. MF, fem. of prin first, Lprimus; akin to Lprior1 :first in time: original 2 a : having no factor except itself and one $langle$3 is a   number $
angle$b : having no common factor except one $langle$ 12 and 25 are relatively  $
angle$3 a : first in rank, authority or significance :principal b : having the highest quality or value $langle$  television time $
angle$ [from Webster's New Collegiate Dictionary]


The most relevant definition for this problem is 2a: An integer g>1 is said to be prime if and only if its only positive divisors are itself and one (otherwise it is said to be composite). For example, the number 21 is composite; the number 23 is prime. Note that the decompositon of a positive number g into its prime factors, i.e., 

egin{displaymath}g = f_1 	imes f_2 	imes dots 	imes f_nend{displaymath}

is unique if we assert that fi > 1 for all i and $f_i le f_j$ for i<j.

One interesting class of prime numbers are the so-called Mersenne primes which are of the form 2p- 1. Euler proved that 231 - 1 is prime in 1772 -- all without the aid of a computer.

Input 

The input will consist of a sequence of numbers. Each line of input will contain one number g in the range -2 31 < g <2 31, but different of -1 and 1. The end of input will be indicated by an input line having a value of zero.

Output 

For each line of input, your program should print a line of output consisting of the input number and its prime factors. For an input number $g>0, g = f_1 	imes f_2 	imesdots 	imes f_n$, where each fi is a prime number greater than unity (with $f_i le f_j$ for ij), the format of the output line should be


egin{displaymath}g mbox{	t = } f_1 mbox{	t x } f_2 mbox{	t x } dots mbox{	t x } f_nend{displaymath}

When g < 0, if $ mid g mid = f_1 	imes f_2 	imes dots 	imes f_n$, the format of the output line should be 

egin{displaymath}g mbox{	t = -1 x } f_1 mbox{	t x } f_2 mbox{	t x } dotsmbox{	t x } f_nend{displaymath}

Sample Input 

-190
-191
-192
-193
-194
195
196
197
198
199
200
0

Sample Output 

-190 = -1 x 2 x 5 x 19
-191 = -1 x 191
-192 = -1 x 2 x 2 x 2 x 2 x 2 x 2 x 3
-193 = -1 x 193
-194 = -1 x 2 x 97
195 = 3 x 5 x 13
196 = 2 x 2 x 7 x 7
197 = 197
198 = 2 x 3 x 3 x 11
199 = 199
200 = 2 x 2 x 2 x 5 x 5



Miguel Revilla
2000-05-19

#include <iostream>
#include <stdio.h>
#include <cmath>
using namespace std;

int main()
{
	long long int n;
	while (scanf("%lld",&n) && n)
	{
		if (n <0)
		{
			n = -n;
			cout << "-"<< n<< " = -1 x ";
		}
		else
		{
			cout << n << " = ";
		}
		long long int k = sqrt((double) n);
		for (long long int i=2; i<=k; i++)
		{
			if (n %i==0)
			{
				n = n/i;
				cout << i<< " x ";
				i = 1;
				k = sqrt((double) n);
			}
		}
		cout << n<< endl;
	}
	return 0;
}


原文地址:https://www.cnblogs.com/Tovi/p/6194882.html