light1236 素数打表,质因数分解

不知道为什么会错

/*
求出 lcm(i,j)==n 的对数,
分解质因数,p1^e1 * p2^e2 * p3^e3 那么 i,j中必定有一个数有e1个p1因子,另一个任意即可
那么最终的结果就是
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 10000005
#define ll long long
ll n; int v[maxn];
int prime[maxn],m;
void init(){
memset(v,,sizeof v);
memset(prime,,sizeof prime);
m=;
for(int i=;i<maxn;i++){
if(v[i]==){
v[i]=i;
prime[++m]=i;
}
for(int j=;j<=m;j++){
if(prime[j]>v[i] || prime[j]*i>n) break;
v[i*prime[j]]=prime[j];
}
}
}
int p[maxn],c[maxn],mm;
void divide(ll n){
memset(p,,sizeof p);
memset(c,,sizeof c);
mm=;
for(int i=;i<=m;i++){
if(prime[i]>n)break;
if(n%prime[i]==){
p[++mm]=prime[i],c[mm]=;
while(n%prime[i]==)n/=prime[i],c[mm]++;
}
}
if(n>)p[++mm]=n,c[mm]=;
} int main(){
init();
int T;
cin>>T;
for(int tt=;tt<=T;tt++){
cin>>n;
divide(n);
ll res=;
for(int i=;i<=mm;i++)
res*=(ll)(*c[i]+);
printf("Case %d: %lld\n",tt,res+>>);
} }

这是网上的ac代码

#include <iostream>
#include <cstdio>
#include <map>
#include <cmath>
#include <map>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
#define LL long long
#define maxn 10000001
bool v[maxn];
vector<int>prime;
void p(){
memset(v,false,sizeof(v));
for(int i=;i<=maxn;i++){
if(v[i])continue;
for(int j=i+i;j<=maxn;j+=i){
v[j]=true;
}
if(!v[i]) prime.push_back(i);
}
}
int main()
{
int t,ca=;
LL n,ans;
p();
scanf("%d",&t);
while(t--){
ans=;
scanf("%lld",&n);
for(int i=;i<prime.size()&&n>;i++){
if(n%prime[i]==){
LL s=;
while(n%prime[i]==){
s++;
n/=prime[i];
}
ans*=(s*+);
}
}
if(n>){
ans*=;
}
printf("Case %d: %lld\n",ca++,(ans+)/);
}
return ;
}
上一篇:MVC 向页面传值方式总结(1)


下一篇:java基础篇---I/O技术(二)