拆拆拆~
Time Limit: 20 Sec
Memory Limit: 256 MB
题目连接
http://acm.uestc.edu.cn/#/problem/show/1246
Description
给你一个数x,你有两个操作
1.分解质因数,如果x是一个合数,那么就将x分解质因数,然后进入操作2,否则输出这个数
2.将分解质因数中的乘号变成加号,执行操作1
问你最后输入多少?
Input
多组数据,大概10000组,每组数据仅包含一个正整数n(1<=n<=10^9)
Output
对于每组数据,输出一个整数,表示最后的数字。如果无法得到最后的数字,输出-1
Sample Input
1 2 4 6 8 10
Sample Output
1 2 -1 5 5 7
HINT
题意
题解:
暴力分解质因数,然后模拟就好了
复杂度sqrt(n)*logn(大概是这个
代码:
#include<iostream> #include<stdio.h> using namespace std; int main() { int n; while(scanf("%d",&n)!=EOF) { int now = n; int sum = 0; int flag = 0; int pre = 0; while(1) { pre = now; sum = 0; flag = 0; for(int i=2;i*i<=now;i++) { if(now%i==0) flag = 1; } if(flag == 0) { flag = now; break; } for(int i=2;i*i<=now;i++) { while(now%i==0) { flag = 1; now/=i; sum+=i; } if(now==1) break; } if(now>1) { sum+=now; now = 1; } if(pre==sum) { flag = -1; break; } now = sum; } printf("%d ",flag); } }