nyoj-520-最大素因子

来源:互联网 发布:网络拓扑画图工具 编辑:程序博客网 时间:2024/05/16 09:41

最大素因子

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序数,例如:2的序数是1,3的序数是2,5的序数是3,以此类推. 研究数论是需要很大的耐心的,为了惩罚那些没有耐心读完题目的童鞋,我们规定:1的最大素因子序数是0.

输入
有多组测试数据,每一行输入一个数字n.(0<n<=1000000)
输出
在接下来的一行,输出结果.
样例输入
2345
样例输出
1213
来源
hdu改编
上传者

ACM_李如兵


往往一旦超时就不知如何是好,稍加修改很难解决问题,这时必须换种方法。

/** * 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;}


0 0
原创粉丝点击