这个题基本上就两个知识点, 一个素数筛选法求素数,另一个是求最大公因子, 不过确定最大素数在素数表中的位置时,要用到二分的思想,不然会超时,下面是具体代码的实现;

 #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 最大素因子的更多相关文章

  1. NYOJ 333

    http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...

  2. NYOJ 1007

    在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...

  3. NYOJ 998

    这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...

  4. 1Z0-053 争议题目解析520

    1Z0-053 争议题目解析520 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 520.Which of the following are not disabled by de ...

  5. NYOJ 99单词拼接(有向图的欧拉(回)路)

    /* NYOJ 99单词拼接: 思路:欧拉回路或者欧拉路的搜索! 注意:是有向图的!不要当成无向图,否则在在搜索之前的判断中因为判断有无导致不必要的搜索,以致TLE! 有向图的欧拉路:abs(In[i ...

  6. nyoj 10 skiing 搜索+动归

    整整两天了,都打不开网页,是不是我提交的次数太多了? nyoj 10: #include<stdio.h> #include<string.h> ][],b[][]; int ...

  7. 简答哈希实现 (nyoj 138 找球号2)

    例题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=138 代码目的:复习哈希用 代码实现: #include "stdio.h&qu ...

  8. nyoj 284 坦克大战 简单搜索

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284 题意:在一个给定图中,铁墙,河流不可走,砖墙走的话,多花费时间1,问从起点到终点至少 ...

  9. nyoj 170 网络的可靠性

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=170 思路:统计每个节点的度,将度为1的节点消去所需要的最少的边即为答案. 代码: #in ...

  10. nyoj 139 我排第几个--康拓展开

    我排第几个 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说 ...

随机推荐

  1. CSS3的appearance属性--改变元素的外观

    CSS3 appearance 属性 CSS 参考手册 实例 使 div 元素看上去像一个按钮: div { appearance:button; -moz-appearance:button; /* ...

  2. .net序列化和反系列化json与类型对象转换

    先添加程序集:  System.Web.Extensions(在 System.Web.Extensions.dll 中) 引用:using System.Web.Script.Serializati ...

  3. STM32 枚举类型和结构体的使用

    结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型.        首先结构体可以在一个结构中声明不同的数据类型.        第二相同结构的结构体变量是可以相互赋值的,而 ...

  4. IFrame中Session丢失的解决办法

    1.打开IIS管理器 inetmgr2.选择被嵌入iframe源站点或者目录,右键点击打开属性框3.切换到HTTP头4.添加5.自定义HTTP头名: P3P6.自定义HTTP头值: CP=" ...

  5. shell命令记录一些

    ps aux | sort -k 5n|tail -5 找到内存最对的进程 ps  aux 是找出全部的进程 sort -k 5n 表示第5个参数进行排序 tail -5 表示最后5个 ps -e - ...

  6. Delphi重载,覆盖,多态

    一.override 重载 type TFigure = class procedure Draw; virtual;//(我的理解是)父类中可以使用父类的,子类中使用子类的.与“四”是有区别的. e ...

  7. 利用Java反射机制完成XML到对象的解析

    对于一些小批量的数据,如果采用数据库来存取的话,未免有点大题小作,使用XML文件是个不错的方法,尤其是在一些Web应用中,经常需要缓存一部分数据,如果将这些数据形成XML文件,解析后放入一个Hasht ...

  8. 快速创建php server

    mkdir testmv test.html testphp -S localhost:8082http://localhost:8082/test.html

  9. bzoj3275

    容易想到是最小割(最大权独立集)然后每个数拆成两个点,不能同时选的之间连边跑最小割,最后答案=总数-mincut/2 因为这样建图将流量变成了原来的两倍 当然这道题更好的建图方法是分成奇数和偶数两个集 ...

  10. BZOJ 1053 [HAOI2007]反素数ant

    1053: [HAOI2007]反素数ant Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1948  Solved: 1094[Submit][St ...