目录
代码
题目描述
给定一个整数 nn,执行如下算法:
- 如果 n=0n=0,则结束算法。
- 找到 nn 的最小质因子 dd。
- 令 nn 减去 dd 并跳转步骤 11。
请你计算,在算法执行的过程中,一共进行了多少次减法操作。
输入格式
一个整数 nn。
输出格式
一个整数,表示减法操作的次数。
数据范围
前三个测试点满足 2≤n≤52≤n≤5。
所有测试点满足 2≤n≤10102≤n≤1010。
输入样例1:
5
输出样例1:
1
输入样例2:
4
输出样例2:
2
解题思路
(参考AcWing 4492. 减法操作(数学方法) - AcWing)
质因子定义:
偶数的最小质因子为2,减去2之后还是偶数,所以n等于偶数时直接n/2就好
奇数的最小质因子要用for循环一个一个试for(i=3;i*i<=n;i+=2),试出来后n-i一定是偶数,也直接n/2再加1,因为还有减去i的一次,然后return0;结束就好。
注意如果n为质数则使用for循环是试不出来的,所以要在for外边加printf("1");
代码
#include<stdio.h>
int main()
{
long long n,j,i,a,b,c,d;
a=0;
scanf("%lld",&n);
if(n%2!=0)
{
for(i=3;i*i<=n;i+=2)
{
if(n%i==0)
{
n=n-i;
a+=(n/2)+1;
printf("%lld",a);
return 0;
}
}
printf("1");
}
else
{
a+=n/2;
printf("%lld",a);
}
return 0;
}