NYOJ-520 最大素因子
这个题基本上就两个知识点, 一个素数筛选法求素数,另一个是求最大公因子, 不过确定最大素数在素数表中的位置时,要用到二分的思想,不然会超时,下面是具体代码的实现;
#include <stdio.h>
#include <stdlib.h>
#define SIZE 1000020
int prime[SIZE];//来保存素数,从下标1开始保存第一个
int temp[SIZE];//这个是用素数筛选法求出的素数
int maxPrimeFactor(int n)//求最大素因子的函数
{
int ans;
for(int i = ; i * i <= n; i ++)
{
while(n % i == )
{
ans = i;//如果能求余, 那么当前的i 就是一个素因子
n /= i;//将n缩小
}
}
if(n > )//此时说明n 没有被任何一个素数整除, 最大素因子的当然是他本身
ans = n;
return ans;
}
int main()
{
// freopen("1.txt", "r", stdin);//利用重定向
// freopen("2.txt", "w", stdout);
int N;
temp[] = ;
for(int i = ; i < SIZE; i ++)//将整个素数表初始化
temp[i] = i;
for(int i = ; i * i< SIZE; i ++)
{
if(temp[i] != -)
{
for(int j = i * i; j < SIZE; j += i)
temp[j] = -;//如果不是素数就将它标记为-1
}
}
int index = ;
for(int i = ; i < SIZE; i ++)
{
if(temp[i] != -)
prime[index ++] = temp[i];//将素数表中的素数复制到prime数组中
}
while(scanf("%d", &N) != EOF)
{
if(N == )//特殊数字,特别对待
{
printf("0\n");
continue;
}
int left = , right = index - , mid = (left + right) / ;//利用二分法确定最大素数在素数表prime中位置,如果直接for循环会超时
int maxPrime = maxPrimeFactor(N);
if(maxPrime == prime[right])//此时下标不是从零开始, 所以只有两个元素时,假如要确定后一个的位置,当前这个二分不行,这个特殊情况单独写出来
{
printf("%d\n", right);
continue;
}
while(maxPrime != prime[mid])
{
if(maxPrime > prime[mid])
left = mid;
else
right = mid;
mid = (left + right) / ;
}
printf("%d\n", mid);//打印下标
}
return ;
}
NYOJ-520 最大素因子的更多相关文章
- NYOJ 333
http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...
- NYOJ 1007
在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...
- NYOJ 998
这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...
- 1Z0-053 争议题目解析520
1Z0-053 争议题目解析520 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 520.Which of the following are not disabled by de ...
- NYOJ 99单词拼接(有向图的欧拉(回)路)
/* NYOJ 99单词拼接: 思路:欧拉回路或者欧拉路的搜索! 注意:是有向图的!不要当成无向图,否则在在搜索之前的判断中因为判断有无导致不必要的搜索,以致TLE! 有向图的欧拉路:abs(In[i ...
- nyoj 10 skiing 搜索+动归
整整两天了,都打不开网页,是不是我提交的次数太多了? nyoj 10: #include<stdio.h> #include<string.h> ][],b[][]; int ...
- 简答哈希实现 (nyoj 138 找球号2)
例题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=138 代码目的:复习哈希用 代码实现: #include "stdio.h&qu ...
- nyoj 284 坦克大战 简单搜索
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284 题意:在一个给定图中,铁墙,河流不可走,砖墙走的话,多花费时间1,问从起点到终点至少 ...
- nyoj 170 网络的可靠性
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=170 思路:统计每个节点的度,将度为1的节点消去所需要的最少的边即为答案. 代码: #in ...
- nyoj 139 我排第几个--康拓展开
我排第几个 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说 ...
随机推荐
- 十月例题F题 - City Game
F - City Game Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Bob is a st ...
- block 和delegate的用法
//block 和delegate的用法 设置代理 #import <UIKit/UIKit.h> typedef void (^ASIHeadersBlock)(NSString *my ...
- spring mvc ModelAndView 404的原因
在使用ModelAndView时不要导入 import org.springframework.web.portlet.ModelAndView; 而要导入以下这个包 import org.sprin ...
- nginx+uwsgi+django
上一涨讲解了如何使用nginx+uwsgi部署wsgi application 其实django配置方式和 application都一样,因为如果我们对application进行扩展就是一个WSGI ...
- codeforces D. Painting The Wall
http://codeforces.com/problemset/problem/399/D 题意:给出n和m,表示在一个n*n的平面上有n*n个方格,其中有m块已经涂色.现在随机选中一块进行涂色(如 ...
- 【HDOJ】3220 Alice’s Cube
状态压缩+逆向BFS.方向数组就是任意相邻的两点(初始化时减1),每个顶点均有4个相邻点.因此,共有16*4/2=32个方向.按序排列即可找到. /* 3220 */ #include <ios ...
- Android 金融项目整理
本来是安安心心周末休假的时间,却被强征来加班.魔都今天雾霾严重,窗外都看不到360无死角都能看到的东方明珠.吃完午饭后睡一觉起来,觉得该给自己做点事情了.那就把项目里面的一些可圈可点的技术都罗列出来, ...
- 组合数学(Pólya计数原理):UvaOJ 10601 Cubes
Cubes You are given 12 rods of equal length. Each of them is colored in certain color. Your task is ...
- 【图论】Codeforces 711D Directed Roads
题目链接: http://codeforces.com/problemset/problem/711/D 题目大意: 给一张N个点N条有向边的图,边可以逆向.问任意逆向若干条边使得这张图无环的方案数( ...
- HDU2222 Keywords Search(AC自动机)
Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...