zoukankan      html  css  js  c++  java
  • 处女座的测验(一)(素数筛+思维)

    链接:https://ac.nowcoder.com/acm/contest/327/H
    来源:牛客网
     

    题目描述

    处女座进行了一场c语言的考试,要求很简单,输出2000个正整数,并且满足以下条件:

    1.       任意两个数互质

    2.     任意两个数x,y,满足,其中为n的因子的个数

    举例:6的因子有1,2,3,6,所以τ(6)=4τ(6)=4

    输入描述:

    本题没有输入

    输出描述:

    
     

    2000行,每行一个正整数

    输出的每个整数都必须在1-4*108之间

    如果有多组答案,输出任意一组即可。

    思路:是积性函数T(x*y)=T(x)*T(y)故只需要保证素数的因子为T(x)>=4即可,便可以把前四千个素数筛出来,然后用第一个去×最后一个,这样组成的两千个即可,因为有数据范围,所以我们肯定筛选前4000个

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    
    int prime[1000005];
    bool vis[1000005];
    void erla() {
    	int cnt =0;
    	memset(vis,false,sizeof(vis));
    	memset(prime,0,sizeof(prime));
    	for(int t=2; t<=1000005; t++) {
    		if(!vis[t]) {
    			prime[cnt++]=t;
    		}
    		for(int j=0; j<cnt&&t*prime[j]<=1000005; j++) {
    			vis[t*prime[j]]=true;
    			if(t%prime[j]==0) {
    				break;
    			}
    		}
    	}
    }
    int a[4005];
    int main()
    
    {
    	erla();
    	int s=0;
    	for(int t=2; t<=1000005; t++) {
    		if(!vis[t]) {
    			a[s++]=t;
    		}
    		if(s==4000) {
    			break;
    		}
    	}
    	for(int t=0; t<s/2; t++) {
    		printf("%d:%d*%d
    ",a[t]*a[s-t-1],a[t],a[s-t-1]);
    	}
    
    
    	return 0;
    }
  • 相关阅读:
    OpenJudge 2764 数根 C++
    OpenJudge / Poj 1835 宇航员 C++
    elasticsearch系统性能调优总结
    ES基本查询总结
    Vim最全快捷键键位图
    Idea常用插件整合
    微信小程序开发资源汇总
    Java JNI调用本地动态库使用详解
    java开发调试定位分析工具大全
    Redux-saga使用教程详解
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781827.html
Copyright © 2011-2022 走看看