HDU Largest prime factor && nyoj 520 最大素因子【素数】
来源:互联网 发布:java中缺省是什么意思 编辑:程序博客网 时间:2024/04/19 02:39
最大素因子
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序数,例如:2的序数是1,3的序数是2,5的序数是3,以此类推. 研究数论是需要很大的耐心的,为了惩罚那些没有耐心读完题目的童鞋,我们规定:1的最大素因子序数是0.
- 输入
- 有多组测试数据,每一行输入一个数字n.(0<n<=1000000)
- 输出
- 在接下来的一行,输出结果.
- 样例输入
2345
- 样例输出
1213
不算复杂的一道题,但是暴力超时,就算是先打好表,然后查找最大的素因子,也是会超时,然后也是发现这个很巧妙的思路,学到了新知识!!
超时的代码:
#include<stdio.h>#include<math.h>#define maxn 1000005int x[maxn],n,cnt,num[maxn];void db()//素数表{cnt=1;for(int i=2;i*i<maxn;++i)//{if(!x[i]){x[i]=++cnt;for(int j=i;j*i<maxn;++j){x[i*j]=1;}}}}void slove(){if(n==1){printf("0\n");}for(int i=n;i>1;--i){if(x[i]!=1&&n%i==0){printf("%d\n",x[i]-1);return;}}}int main(){db();while(~scanf("%d",&n)){slove();}return 0;}
看明白大神的思路之后,也是吓尿了:这样都可以!!也是真醉了,赶紧膜拜膜拜大神!!
一般的思路是在打表的时候,某个素数位置保存的是这个素数的编号,然后其他点的编号是 0 或 1 这样很大程度的浪费了空间和时间,然后如果在每次进行素数筛选的时候,直接把能整除的素数的那个编号全部对应赋上这个编号值,然后这样更新下去,每个位置保存的都是他的最大素因子的编号值!!想不明白就再想!!!
ps:早就感觉打表素数不可能这么简单,原来还可以这么有技巧的变形,处理了更多的信息,看来自己还有很远的路要走 啊~~
#include<stdio.h>#include<math.h>#define maxn 1000005int x[maxn],n,cnt;void db(){cnt=1;for(int i=2;i<maxn;++i)//这里需要遍历到最后...{if(!x[i])//是素数的话..{x[i]=cnt++;//给素数编号for(int j=2;j*i<maxn;++j)//处理素数的倍数{x[i*j]=x[i];//记录的是每个数的最大素因子的编号}}}}int main(){db();while(~scanf("%d",&n)){printf("%d\n",x[n]);//直接调用}return 0;}
hdu 2136
Largest prime factor
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9232 Accepted Submission(s): 3259
Problem Description
Everybody knows any number can be combined by the prime number.
Now, your task is telling me what position of the largest prime factor.
The position of prime 2 is 1, prime 3 is 2, and prime 5 is 3, etc.
Specially, LPF(1) = 0.
Now, your task is telling me what position of the largest prime factor.
The position of prime 2 is 1, prime 3 is 2, and prime 5 is 3, etc.
Specially, LPF(1) = 0.
Input
Each line will contain one integer n(0 < n < 1000000).
Output
Output the LPF(n).
Sample Input
12345
Sample Output
01213
同样的题,还是写一块比较好....
/*2016年1月17日15:25 */#include<stdio.h>#include<string.h>const int maxn=1000005;int fac[maxn];void db(){int cnt=0;fac[1]=0;for(int i=2;i<maxn;++i){if(!fac[i]){++cnt;for(int j=1;i*j<maxn;++j){fac[i*j]=cnt;}}}}int main(){int n;db();while(~scanf("%d",&n)){printf("%d\n",fac[n]);}return 0;}
0 0
- HDU Largest prime factor && nyoj 520 最大素因子【素数】
- hdu oj 2136 Largest prime factor 和 nyoj 520 最大素因子 【筛选法】
- Largest prime factor(最大素数因子)
- HDU 2136 Largest prime factor(最大素因子)
- Largest prime factor 最大素因子
- hdu 2136Largest prime factor n的最大因子是第几个素数
- HDU 2136 Largest prime factor (最大素因子序号,cin超时呀!!!)
- HDU 2136 Largest prime factor 数论-素数
- hdu 2136 Largest prime factor(素数筛选)
- HDU:2136 Largest prime factor!(素数)
- 【HDU 2136】Largest prime factor(素数)
- hdu-2136-Largest prime factor [素数筛]
- (质因子打表记录素数的位置)HDU Largest prime factor
- (hdu step 2.1.3)Largest prime factor(求一个数的最大质因子的位置)
- hdu Largest prime factor
- hdu Largest prime factor
- Largest prime factor HDU
- hdu 2136 Largest prime factor----类似筛素数的方法
- hdu 5423 Rikka with Tree 树的性质
- Note For Linux By Jes(18)-X Window 配置介绍
- getopt笔记
- Cornfields - POJ 2019 单调队列
- Linux的7个运行级别
- HDU Largest prime factor && nyoj 520 最大素因子【素数】
- 胶卷
- java线程生命周期图解
- Spring 加载xml配置文件的方式 ApplicationContext
- 成为GEEK是个梦想,从这一刻出发。
- 3.GitHub译文之创建仓库分支
- presenting controller & presented controller 如何区分
- Android Api Demos登顶之路(五十三)Service Foreground Service Controller
- c#格式化数字