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


  • 相关阅读:
    scikit-learn机器学习(四)使用决策树做分类
    从最大似然到EM算法浅解
    scikit-learn机器学习(三)多项式回归(二阶,三阶,九阶)
    一个打印调试信息的样例
    AppFuse 3的乱码问题
    垂直和水平居中方法小结
    Hero In Maze
    Highmaps的天津地图数据JSON格式
    互联网公司面试中常常被问的问题
    MySQL(6)--复制,docker容器中
  • 原文地址:https://www.cnblogs.com/KirinSB/p/9409136.html
Copyright © 2011-2022 走看看