zoukankan      html  css  js  c++  java
  • Max Factor(素数筛法)题解

    Max Factor

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 10245    Accepted Submission(s): 3304


    Problem Description
    To improve the organization of his farm, Farmer John labels each of his N (1 <= N <= 5,000) cows with a distinct serial number in the range 1..20,000. Unfortunately, he is unaware that the cows interpret some serial numbers as better than others. In particular, a cow whose serial number has the highest prime factor enjoys the highest social standing among all the other cows.

    (Recall that a prime number is just a number that has no divisors except for 1 and itself. The number 7 is prime while the number 6, being divisible by 2 and 3, is not).

    Given a set of N (1 <= N <= 5,000) serial numbers in the range 1..20,000, determine the one that has the largest prime factor.
     

    Input
    * Line 1: A single integer, N

    * Lines 2..N+1: The serial numbers to be tested, one per line
     

    Output
    * Line 1: The integer with the largest prime factor. If there are more than one, output the one that appears earliest in the input file.
     

    Sample Input
    436384042
     
    Sample Output

    38


    思路:

    忘记了memset()只能初始化0、-1,手贱赋了个1,然后疯狂WA

    这里用到了素数筛选法:单击666查看大神详解

    代码:

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<queue>
    #include<math.h>
    #include<iostream>
    #include<algorithm>
    #define INF 0x3f3f3f3f
    #define N 20010
    using namespace std;
    int vis[N];
    
    void prime(){	//素数筛选 
    	memset(vis,0,sizeof(vis));
    	vis[0]=1,vis[1]=0;	//这里1都算素数 
    	for(int i=2;i<=20000;i++){
    		if(!vis[i]){
    			for(int j=i*i;j<=20000;j+=i){
    				vis[j]=1;
    			}
    		}
    	}
    }
    
    int main(){
    	int n,ans,maxp,i,a;
    	prime();
    	while(~scanf("%d",&n)){
    			maxp=0;
    			ans=0;
    			while(n--){
    				scanf("%d",&a);
    				for(i=a;i>0;i--){
    					if(!vis[i]){
    						if((i>maxp) && a%i==0){
    							maxp=i;
    							ans=a;
    							break;
    						}		
    					}
    				}
    			}
    			printf("%d
    ",ans);
    	}
    	return 0;
    }


  • 相关阅读:
    如何使用Flannel搭建跨主机互联的容器网络
    移动端——touch事件
    Javascript 模块化指北
    vue重构--H5--canvas实现粒子时钟
    redux-saga框架使用详解及Demo教程
    前端代码编写规范
    探秘JS的异步单线程
    POJ 3714 Raid 近期对点题解
    EditText把回车键变成搜索
    Swift语言概览
  • 原文地址:https://www.cnblogs.com/KirinSB/p/9409136.html
Copyright © 2011-2022 走看看