數論練習1題解C
阿新 • • 發佈:2018-12-09
數論練習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 昨天在補職業生涯規劃網課。。。。躺屍
以上