题目描述:
给定一个整数,每次除以它非1的最小因子,若除完不为1,则+1,问几次后变为1
样例输入:
12
样例输出
2
样理解释:
12-> (6 -> 7) -> (1)
数据范围:
输入的数字为正整数且小于10^12
# include<stdio.h>
# include<stdlib.h>
# include<math.h>
/*给定一个整数,每次除以它非1的最小因子,
若除完不为1,则+1,问几次后变为1
样例输入:
12
样例输出
2
样理解释:
12-> (6 -> 7) -> (1)
数据范围:
输入的数字为正整数且小于10^12*/
typedef struct Node
{
long int num;
struct Node* link;
}node;
int prime(long int a)
{
long int temp;
int flag = 0;
for(long int i =2; i < sqrt(a); i ++)
{
if(a % i == 0)
{
flag = 1;
break;
}
}
return flag;
}
int main()
{
int times = 0, i;
long int temp = 0;
node * head;
head = (node*)malloc(sizeof(node));
head -> link = NULL;
node * p;
p = (node*)malloc(sizeof(node));
scanf("%ld", &(*p).num);
p -> link = head -> link;
head -> link = p;
if(prime(p ->num)==0 && p -> num >=2)
{
times = 1;
goto exit;
}
while((*p).num != 1)
{
for(i = 2; p -> num % i != 0; i ++)
{
}
temp = p -> num / i;
times += 1;
p = (node*)malloc(sizeof(node));
p -> num = temp;
p -> link = head -> link;
head -> link = p;
if(p -> num != 1)
{
p = (node*)malloc(sizeof(node));
p -> num = temp + 1;
head -> link = p;
}
else
{
break;
}
}
exit:
printf("%d\n", times);
return 0;
}