P1075 [NOIP2012 普及组] 质因数分解

博主分享了一次编程经验,最初在解决质因数分解问题时思路过于复杂,导致代码冗长。经过反思和他人启发,意识到只需找出因子即可,无需额外判断素数。简化后的代码更高效,思路更清晰,强调了解题时应注重题目本质和基础特性。
摘要由CSDN通过智能技术生成

一道水题但做完才发现自己是憨憨,或许题很简单但思路却完全不一样,代码的长度也截然不同

看过题后是不是发现真的简单,

我的第一次思路就是将其遍历找到素数,判断另外的数满不满足是不是因子同时是素数的条件。

上代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
int zhishu(int n)
{
	int i,f=1;
	for(i=2;i<=sqrt(n);i++)
	{
		
		if(n%i==0)
		{
			f=0;
			break;
		}
		if(f==1)
		{
			return 1;
		}
		else return 0;
	}
}
main()
{
	long long n,j;
	int i,k;
	scanf("%lld",&n);
	for(i=2;i<=sqrt(n);i++)
	{
		if(zhishu(i))
		{
			j=n/i;
			if(j*i==n&&zhishu(j))
			printf("%d",j);
		}
	}
	return 0;
}

但我不懂哪里出现了问题

 下载测试点后发现输入6输出3,但我代码同样是这样。后来受人启发后将题目重读一遍才发现,是我想的太复杂了首先题目说这个数是两个不同质数的乘积,那么我们可以想一想质数是不是只能被其自己和一整除,那么这数能整除的除了一和它本身之外只有两个素数了吗。所以我们只要通过找他的因子输出那个大的就可以不用进行素数判断。

#include<stdio.h>
#include<string.h>
#include<math.h>
 main()
 {
 	long long n;
 	scanf("%lld",&n);
 	int i,j;
 	for(i=2;i<=sqrt(n);i++)
 	{
 		j=n/i;
 		if(j*i==n)
 		printf("%d",j);
	 }
 }

这样是不是变得十分简单了呢。

通过这题我受到的启发不要拘泥于一种想法,要多思考从题目本身下手,了解一下基础他的特点,这样代码不仅变得简单,而且思路也更加简洁,这样才是做题的目的。

加油。

2021/11/16

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值