最大素因子
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序数,例如:2的序数是1,3的序数是2,5的序数是3,以此类推. 研究数论是需要很大的耐心的,为了惩罚那些没有耐心读完题目的童鞋,我们规定:1的最大素因子序数是0.
-
输入
- 有多组测试数据,每一行输入一个数字n.(0<n<=1000000) 输出
- 在接下来的一行,输出结果. 样例输入
-
2 3 4 5
样例输出
-
1 2 1 3
来源
- hdu改编 上传者
往往一旦超时就不知如何是好,稍加修改很难解决问题,这时必须换种方法。
/** * Project Name: nyoj_2.0 * File Name: 520.cpp * Created on: 2015年5月9日 下午2:58:09 * Author: jtahstu * QQ: 1373758426 E-mail:1373758426@qq.com * Copyright (c) 2015, jtahstu , All Rights Reserved. */ #include<cstdio> #include<algorithm> using namespace std; int a[1000005]; int icount = 1; int main() { for(int i = 2; i <= 1000000; i++)//筛法求素数,然后给素数赋值,即第几个 { if(!a[i]) { a[i] = icount++; for(int j = i * 2; j <= 1000000; j += i) a[j] = a[i]; } } int num; while(scanf("%d", &num) == 1) { for(int i = num; i >= 1; i--) { if(num % i == 0 && a[i] != -1) { printf("%d\n", a[i]); break; } } } } #include<iostream>//TLE #include<cstdio> #include<cmath> #include<algorithm> #include<string> #include<cstring> using namespace std; bool prime520(int a) { for (int i = 2; i * i <= a; i++) if (a % i == 0) return false; return true; } int main2() { int count = 1, a[80000] = { 0 }, n; for (int i = 2; i <= 1000000; i++) if (prime520(i)) a[count++] = i; while (cin >> n) { if (n == 1) cout << "0" << endl; else if (prime520(n)) { for (int j = 1; j < count; j++) if (a[j] == n) { cout << j << endl; break; } } else { bool flag = false; for (int i = n / 2; i > 0; i--) if (!flag) { if (n % i == 0 && prime520(i)) { for (int j = 1; j < count; j++) if (a[j] == i) { flag = true; cout << j << endl; break; } } } } } return 0; }