C0210 [2012普及组-A]质因数分解-C语言写

题目描述

已知正整数n是两个不同的质数的乘积,试求出较大的那个质数。

输入描述

输入只有一行,包含一个正整数n。

输出描述

输出只有一行,包含一个正整数p,即较大的那个质数。

样例输入 1

21
样例输出 1

7
提示
【数据范围】

对于60%的数据,6≤n≤1000。

对于100%的数据,6≤n≤2*10^9 。

代码及思路:

/*
	出错点:题目是一个数等于两个数的质数的乘积,容易忽略质数这个条件
	解题思路:先输入整数N,然后从i从2开始遍历(循环)到N-1, 若N能够整除i
	同时N的积的分解是两个质数时,则最大质数就是N除以i的结果。因为i是从2开始的
	一旦第一次出现N整除i,则说明N/i是最大的(N一定,第一次出现整除则,i最小) 
*/ 
#include<stdio.h>  //头文件 
#include<math.h>  //数学函数的声明(下文用到了sqrt函数) 
int maxNum(int n);//最大质数的函数声明 
int judge(int m);//判断一个数是否是质数的函数声明 
/*主函数*/
int main(void){ 
	int n;
	scanf("%d",&n);//N的输入 
	printf( "%d",maxNum(n) );//输出最大质数(调用了函数) 
	return 0;
} 
/*最大质数的函数声明 */ 
int maxNum(int n){
	int i,temp,temp1,temp2;
	for(i=2;i<n;i++){
		if(n%i==0){
			temp1=i;//temp1和temp2用来存放N的两个积 
			temp2=n/i;
			if( judge(temp1)&&judge(temp2) ){//判断是否是质数 
				return temp2;//返回最大质数 
			}
		}
	}
}
/*
	判断素数(质数) 
*/ 
int judge(int m){
	int i,t;
	for(i=2;i<=sqrt(m);i++){
		if(m%i==0){//如果m能够整除i则跳出循环 
			break;
		}
	} 
	if( i==( (int)sqrt(m) +1 ) ){ 
		t=1;
	}else{
		t=0;
	}
	return t;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值