zoukankan      html  css  js  c++  java
  • uestc 1725 吴神数

    // 筛选法
    // 先求出 sqrt(1<<31)内的素数
    // 然后筛选出符合要求的数
    // 详情见代码注释
    //
    #pragma comment(linker, "/STACK:1024000000,1024000000") #include <iostream> #include <algorithm> #include <queue> #include <stack> #include <math.h> #include <stdio.h> #include <string.h> using namespace std; #define MOD 1000000007 #define maxn 1000010 #define maxm 48010 #define LL long long int pr[maxm]; int p; void getP(){ int i,j; for(i=4;i<maxm;i+=2) pr[i]=1; for(i=3;i*i<maxm;i+=2) if(!pr[i]) for(j=i*i;j<maxm;j+=i) pr[j]=1; pr[p++]=2; // printf("%d ",p); for(i=3;i<maxm;i+=2) if(!pr[i]) pr[p++]=i;//,printf("%d ",i); } int fac[maxn],f[maxn],lt[maxn]; int main(){ getP(); int T; int A,B; LL tp; scanf("%d",&T); int i; LL j,k; while(T--){ scanf("%d %d",&A,&B); LL len=B-A; for(i=0;i<=len;i++) fac[i]=0,f[i]=false,lt[i]=A+i; tp=1; for(i=1;i<p;i++){ // 素数从 3 开始 因为偶数时不可能符合要求的
    tp
    =tp*pr[i]*pr[i]; if(tp>B) break; for(j=(A-1+pr[i])/pr[i];j*pr[i]<=B;j++) { k=j*pr[i]; if(j%pr[i]==0) f[k-A]=true;// 去掉 平方因子
    if((j*pr[i]-1)%(pr[i]-1)!=0) f[k-A]=true; // 条件3
    fac[k
    -A]++; // 条件 2 lt[k-A]=lt[k-A]/pr[i];可能出现比sqrt(1<<31)大的素因子,所以需要知道 } tp=1; } int ans=0; for(i=0;i<=len;i++)// 这里就写的比较繁杂了 就是各种情况讨论
    if(!f[i]){ if(fac[i]==2&&lt[i]>1){ tp=i+A; if((tp-1)%(lt[i]-1)==0) ans++; }else if(fac[i]>2){ tp=i+A; if(lt[i]==1) ans++; else if((tp-1)%(lt[i]-1)==0) ans++; } } printf("%d ",ans); } }
  • 相关阅读:
    uniapp--悬浮可拖动按钮-实现思路
    js获取指定日期的前一天/后一天
    适配
    使用了@Slf4j log没有info的方法 .info()方法爆红或者log爆红
    用hexo在本地搭建自己的博客
    gulp 前端构建工具使用
    springboot+idea 热部署
    配置DNS服务器转发器
    windows server2008 r2安装DNS服务器
    卸载jdk1.7
  • 原文地址:https://www.cnblogs.com/372465774y/p/3222243.html
Copyright © 2011-2022 走看看