数论练习1题解C
考察1-n中的每一个i
i=k*d
如果k为合数 则 k=pq
qd>d 显然d不是最大正因子
所以k必为素数
若k小于d的最小素因子 则 设d最小素因子为q
则 kd/q>d 因此亦不成立 从而我们得到思路
首先用筛选法筛出素数
然后每次都进行比较
代码如下
#include<iostream>
#include<cstring>
using namespace std;
int pd[1000001];
int prim[500001];
int main()
{
int i,j,t,k,num,n,d,s;
memset(pd,0,sizeof(pd));
pd[1]=1;
num=1;
for (i=2;i<=1000000;i++)
if (pd[i]==0)
{
prim[num]=i;
num++;
}
for (j=2;j<=1000000/i;j++)
pd[i*j]=1;
while(cin>>t)
{
for (k=1;k<=t;k++)
{
s=0;
cin>>n>>d;
for (i=1;i<=num;i++)
{
if (d%prim[i]==0&&d!=prim[i]) break;
if ((i*d)>=n) break;
}
cout<<i-1<<endl;
}
}
return 0;
}
貌似我交迟了2333 昨天在补职业生涯规划网课。。。。躺尸
以上