• UVa 11408


    题目:一个数的素因子的和假设也是素数就叫做DePrimes,统计给定区间内的DePrimes。

    分析:数论。本题使用用一种素数的筛法,欧拉筛法,也加线性筛法。

                            这样的方法,每次删选分两种情况:1.素因子不反复;2.素因子反复;

                            利用这个性质,统计DePrimes,假设素因子不同就加和,否则就取对应的最小不同集合;

                            打表计算,做差输出就可以。

    说明:线性筛法,比传统的筛法在数据量大时会快(⊙_⊙)。

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    
    using namespace std;
    
    int visit[5000002];
    int prime[5000002];
    int sum[5000002];
    int ans[5000002]; 
    
    int main()
    {
    	for ( int i = 0 ; i < 5000001 ; ++ i ) 
    		visit[i] = sum[i] = 0;
    	int count = 0;
    	for ( int i = 2 ; i < 5000001 ; i ++ ) {
    		if ( !visit[i] ) {
    			prime[count ++] = i;
    			sum[i] = i;
    		}
    		for ( int j = 0 ; j<count&&i*prime[j]<5000001 ; ++ j ) {
    			visit[i*prime[j]] = 1;
    			if ( !(i%prime[j]) ) {//素因子有反复,去不反复部分 
    				sum[i*prime[j]] = sum[i];
    				break;
    			}else sum[i*prime[j]] = sum[i] + prime[j];//素因子不反复 
    		}
    		ans[i] = ans[i-1] + !visit[sum[i]];
    	}
    	
    	int a,b;
    	while ( scanf("%d",&a) && a ) {
    		scanf("%d",&b);
    		printf("%d
    ",ans[b]-ans[a-1]);
    	}
    	return 0;
    }
    

  • 相关阅读:
    复习重温(类型转换)
    题解SDOI/SXOI2022 子串统计
    frp
    mysql 查询n天内的数据 涂涂
    mysql导入导出数据 涂涂
    查看端口占用+机器联通 涂涂
    java运行服务卡住排查——jstack 涂涂
    mysql链接错误,导致拒绝链接 涂涂
    linux后台执行程序 涂涂
    linux删除指定日期的文件(手动+自动) 涂涂
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4552933.html
Copyright © 2020-2023  润新知