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

 #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 ;
}

最新文章

  1. HashMap 源码解析
  2. 基本XML解析---编写
  3. swiper 页面双向设置
  4. 【POJ】【2151】Check the difficulty of problems
  5. ORA-12162: TNS:net service name is incorrectly specified
  6. Windows 7/8 创建WIFI热点
  7. eclipse创建多模块maven工程小结
  8. linux 定时任务计划
  9. Get与POST的理解
  10. 2008技术内幕:T-SQL语言基础
  11. 请求库-selenium 模块
  12. React教程(一) React介绍与搭建
  13. 如何破解加密了的word文档
  14. spiflash
  15. java开发师笔试面试每日12题(2)
  16. [HNOI2018]寻宝游戏
  17. RabbitMQ的安装部署
  18. SharePoint Online 创建文档库
  19. 一个简单的 JSON 生成/解析库
  20. Django知识总汇

热门文章

  1. python内置字符串操作方法
  2. bzoj3047: Freda的传呼机 &amp;&amp; 2125: 最短路
  3. 应用SVN(CentOS中搭建SVN服务器)
  4. Google为何这么屌
  5. 零零碎碎搞了一天最后发现是ruby版本问题
  6. 「Poetize3」绿豆蛙的归宿
  7. 【转】Java运算符优先级
  8. vtk 中文显示
  9. 动软代码生成器 可用于生成Entity层,可更改模板 /codesmith 也可以
  10. poj 1556 The door