zoukankan      html  css  js  c++  java
  • (素数暴力筛)HDU

    分析:

    现场的时候,学长A的很快,队友写了一个瞎几把优化的素数筛,C++T了。

    然后本地试了15组最差数据,跑了6s,然后就用java重写一波,交了之后7sA了。。

    又学了一招,,C++勉强超时java说不定可过。。

    不过正解应该在《挑战程序设计》的120-121页,一模一样的数据规模,,学长就是改这个A的。。

    据说标程也差不多。

    代码(java,和C++一模一样的):

     1 import java.io.*;  
     2 import java.math.*;  
     3 import java.util.*;  
     4 import java.text.*;  
     5 
     6 public class Main {
     7     static int p[] = new int[100010];
     8     static long m[] = new long[1000010];
     9     static long m2[] = new long[1000010];
    10     static int num=0;
    11     static long mod = 998244353;
    12     
    13     static void init(){
    14         for(long i=2;i<=1000000;i++){
    15             if(m[(int)i]==0){
    16                 p[num++]=(int)i;
    17                 for(long j=i*i;j<=1000000;j+=i){
    18 //                    System.out.println(j);
    19                     m[(int)j]=1;
    20                 }
    21             }
    22         }
    23     }
    24     
    25     static public void main(String args[]){
    26         init();
    27         int t;
    28         Scanner cin = new Scanner (new BufferedInputStream(System.in));
    29         t=cin.nextInt();
    30         long l,r,k;
    31         while(t-->0){
    32             long sum=0;
    33             l=cin.nextLong();
    34             r=cin.nextLong();
    35             k=cin.nextLong();
    36             for(int i=0;i<=(int)(r-l);i++){
    37                 m2[i]=m[i]=1;
    38             }
    39             for(int i=0;i<num;i++){
    40                 long x=l/p[i];
    41                 if(l%p[i]!=0)x++;
    42                 long a;
    43                 x*=p[i];
    44                 while(x<=r){
    45                     a=x;
    46                     long c=0;
    47                     while(a%p[i]==0){
    48                         c++;
    49                         a/=p[i];
    50                     }
    51                     m[(int)(x-l)]=m[(int)(x-l)]*(c*k+1)%mod;
    52                     m2[(int)(x-l)]*=(x/a);
    53                     x+=p[i];
    54                 }
    55             }
    56             for(long i=l;i<=r;i++){
    57                 if(m2[(int)(i-l)]!=i)m[(int)(i-l)]=m[(int)(i-l)]*(k+1)%mod;
    58             }
    59             for(long i=l;i<=r;i++){
    60                 sum=(sum+m[(int)(i-l)])%mod;
    61             }
    62             System.out.println(sum);
    63         }
    64         
    65         
    66     }
    67 }
  • 相关阅读:
    hdu 1443 Joseph 约瑟夫环
    hdu 1568 Fibonacci 对数。。
    UILineBreakMode
    Android RelativeLayout 动态添加组件
    iOS 让view触发点击事件
    读取plist文件数据
    [转]Android获取SD卡视频音频文件
    ubuntu下vim修复
    DMO(DirectX Media Object)的工程创建过程及其调用方式
    《Windows程序设计》笔记 —— Chapter One
  • 原文地址:https://www.cnblogs.com/tak-fate/p/7283654.html
Copyright © 2011-2022 走看看