【UvaOJ 重要!】【基础题目】【Maths - Number Theory】 10392 - Factoring Large Numbers

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=100&page=show_problem&problem=1333


题目意思为,输入一个大数n(g++下为long long),输出他的所有质因数。


因为题中有一句:

You may assume that there will be at most one factor more than 1000000.


意思是最多有一个因子大于1000000,那么说明其他因子均在1-1000000之间,于是遍历1000000,对每个数,循环得去除n,直到不能整除,则换下一个因子。


这里不用去算出1000000以内的所有质数,因为循环过程中,如果因子是非质数,比如:4,那么在除以2的阶段,早就把4这个因子除掉了,当前的n肯定不能被4整除。


循环到最后,如果n为1了,说明没有大于1000000的因子,退出循环结束,否则循环肯定遍历完所有因子,此时若n不为1,还要输出n。

----------------------------------------------------------------


另外记一下,如何判断一个数为素数:


判断一个整数m是否为素数只需被2~根号m之间的每个数去除就可以了。只要整除,则不是素数。
 
-------------------------------------------------
代码:
 
#include<iostream>
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<fstream>
using namespace std;

int main()
{
	//ifstream cin("in");
	long long n;
	while(cin>>n)
	{

		if(n<0)
			break;
		for(long long x = 2; x <= 1000000; x++)
		{
			while(n % x == 0)
			{
				cout<<"    "<<x<<endl;
				n /= x;
			}
			if(n == 1)
				break;
		}
		if(n != 1)
			cout<<"    "<<n<<endl;
		cout<<endl;
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值