HDU2303(数论)大整数求余+素数筛选

来源:互联网 发布:php网页聊天室原理 编辑:程序博客网 时间:2024/06/05 04:15

Sample Input
143 10143 20667 20667 302573 302573 400 0
 

Sample Output
GOODBAD 11GOODBAD 23GOODBAD 31
 


给你两个数a ,b; 让你求a 的最小素因子是否小于b

枚举小于b 的素数对a进行大整数求余即可。

按照这个栈爆了,看别人对大整数部分进行了处理(感觉对得莫名其妙,稍微改点点就不过╯▽╰/)


#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <queue>#include <algorithm>#pragma comment(linker, "/STACK:102400000,102400000")typedef long long ll;typedef unsigned long long ull;using namespace std;const int N=1000050;char p[200];int q[N],t[N];int n,L,R,c;int len;int tot;void prim(){    int i,j;    for(i = 2;i < 1000000;i++)        q[i] = 1;    for(i= 2,tot = 0; i < 1000000; i++)    {        if(q[i])        {            t[tot++] = i;            for(j = i*2; j<1000000; j+=i)                q[j] = 0;        }    }}bool work(int m){    int ans = 0;    for(int i = 0; i < len; i++)        ans = (int)(((ll)ans*10 + p[i]-'0') % m);    if(ans == 0)        return true;    else        return false;}int main(){    int i;    prim();    while(scanf("%s%d",p,&c))    {        int flag = 1;        if(c == 0 && p[0] == '0')            break;        len = strlen(p);        for(i = 0; t[i] < c && i <= tot; i++)            if(work(t[i]))            {                flag = 0;                break;            }        if(!flag)            printf("BAD %d\n",t[i]);        else            printf("GOOD\n");    }    return 0;}








0 0
原创粉丝点击