下午整理的 素数打表 大数与整型相乘 求余模板
发布时间:2020-12-14 02:21:49 所属栏目:大数据 来源:网络整理
导读:#include cstdio#include cstringint p[101];void getPrim(int N){ // 打素数表的模板。 int i,j; // 素数最大小于N memset(p,-1,sizeof (p)); for(i=2; i*i=N; i++) { if(p[i]) { for(j=i*2; j=N; j+=i) p[j] = 0; } } p[0] = 0; for(i=2; i=N; i++) //1不
#include <cstdio> #include <cstring> int p[101]; void getPrim(int N){ // 打素数表的模板。 int i,j; // 素数最大小于N memset(p,-1,sizeof (p)); for(i=2; i*i<=N; i++) { if(p[i]) { for(j=i*2; j<=N; j+=i) p[j] = 0; } } p[0] = 0; for(i=2; i<=N; i++) //1不是素数 if(p[i]) p[++p[0]] = i; //p[0] 为素数个数 } void initNum(char *str,int *num) { int i,k; //字符转换为4位数存入num 数组 num[0] = 1; //保存数组中有几位4位数字 num[1] = 0; for(k=1,i=strlen(str)-1; i>=0; i--,k*=10) { if(k == 10000){ k = 1; num[0]++; num[num[0]] = 0; } num[num[0]] += (str[i]-'0') * k; } } void Mul(int *num,int bit) { int i=1; __int64 tmp=0; for (i=1; i<=num[0]; i++) { tmp += 1ll*num[i] * bit; num[i] = tmp%10000; tmp /= 10000; } while(tmp) { num[++num[0]] = tmp%10000; tmp /= 10000; } return; } void printNum(int *num) { //大数输出 printf("%d",num[num[0]]); //第一位先输出 for (int i=num[0]-1; i>=1; i--) printf("%04d",num[i]); //四位输出不足补零 printf("n"); } int Mod(int *num,int mod) { int ans = 0; for (int i=num[0]; i>=1; i--) ans = (1ll*ans*10000+num[i]) % mod; return ans; } int main() { int i; //得到小于等于100的素数,并输出 getPrim(100); for (i=1; i<=p[0]; i++) printf("%dn",p[i]); //大数与整型数相乘,并输出结果 int num[100],k; char str[100]; scanf("%s%d",str,&k); initNum(str,num); Mul(num,k); printNum(num); //大数与整型取余并输出结果 scanf("%s%d",num); printf("%dn",Mod(num,k)); return 0; } 收藏于 2011-10-19 来自于百度空间 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |