HDU 5750 Dertouzos

来源:互联网 发布:mac直接进入win10 编辑:程序博客网 时间:2024/05/29 14:15

#include <iostream>#include <cmath>using namespace std;const int N=1000005;int prime[N];  void IsPrime(){   //埃式筛法打质数表     prime[0]=0;prime[1]=0;prime[2]=1;       for(int i=3;i<N;i++)          prime[i]=(i%2==0?0:1);         for(int i=3;i<=sqrt(N);i++) {       if(prime[i]) {         for(int j=i*i;j<=N;j+=2*i)            prime[j]=0;        }                 } }  int main(){int t;scanf("%d",&t);IsPrime();while(t--){int count=0;int n,d;scanf("%d%d",&n,&d);for(int i=2;i<=d;i++){if(prime[i]){if(d*i<n)count++;if(d%i==0)break;//很重要很重要的一步if(d*i>=n)break;}}printf("%d\n",count);}}


1.这题大概的思路是打出素数表,然后枚举i 。如果i是素数且i*d<n(n以内的整数)、d%i!=0(d是最大的正约数),则满足题意;
2.我开始一直忽略了d i之间整除的关系,所以就一直WA 。提供一组测试数据:41 8 答案应该为1;
3.官方题解:我没看懂。。。

0 0