1. 程式人生 > >數論練習1題解C

數論練習1題解C

數論練習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 昨天在補職業生涯規劃網課。。。。躺屍
以上